Soru & Cevap

ViewPager scrool problemi.

26.09.2013 - 01:01

ListView in header ina view pager ekliyorum. View pager i kaydirdigim zaman iyi bir sekilde kaymiyor. Takiliyor. Boyle bir problem daha once yasayan varmidir acaba ? Yardimci olabilirmisiniz ?

24 Görüntülenme

6 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-707-1383654821.jpg
cemturker
28.09.2013 - 10:46

@Sultan

<com.paket.adim.VerticalListview
...
></com.paket.adim.VerticalListView>

seklinde kullanabilirsin. 

 

Profile picture for user sultan
sultan
27.09.2013 - 04:57

VerticalListView olustururken design kisminda xml de nasil tanimlamam gerekir? Bu list view nasil ulasacagim yani ?

picture-707-1383654821.jpg
cemturker
27.09.2013 - 04:00

Sikinti hem ViewPager in hem de ListView in touch event i yakalamasindan kaynaklaniyor. Bunun icin kabaca sadece vertical yondeki touch evente cevap veren bir ListView hazirlaman yeterli olur. Bunun icin su ListView i kullanabilirsin;

public class VerticalListView extends ListView {
    private float xDistance, yDistance, lastX, lastY;

    public VerticalListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if (xDistance > yDistance)
                return false;
        }

        return super.onInterceptTouchEvent(ev);
    }
}

Bu sinifi yarattiktan sonra Eclipse'in designer tarafinda  "Custom & Library Views" kismini refresh ederek custom ListView i kullanabilirsin.

Profile picture for user rifatdover
rifatdover
27.09.2013 - 02:17

Sanırım senin tasarımsal bir hatan var. ViewPager ı Bir ListViewIn HeaderView ı olarak kullanmak doğru bir yöntem olmayabilir bunun yerine ViewPager ı bir fragment içerisinde ListView ı başka bir fragment içerisinde kullanman daha doğru bir yöntem olabilir.

Ancka illaha böyle kullanman gerekli ise sadece bu kodun yine yeterli olacağını düşünmüyorum çünkü bu defa ViewPager'a dokunarak aşağıya kaydırmaya kalktığında ListView ın kayamadığını göreceksin. Burada ViewPager ı extend ederek kendi CustomViewPager ını yazman gerekli burada da yapman gereken onTouchEvent de  MotionEvent.ACTION_MOVE  üzerinde bir hareket history si tutarak kullanıcı tarafından yapılan yatay ve düşey hareketleri algılatman gerekmekte. Buna göre hareketin ViewPager'a mı yoksa ListView 'a mı aktarılacağını belirtmen lazım.

Yukarıdaki kısımda ise myScrollView olarak belirttiği senin ListView'ın olmakta. 

Profile picture for user sultan
sultan
27.09.2013 - 11:59

myViewPager.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

if(event.getAction() == MotionEvent.ACTION_MOVE && myScrollView!=null){ myScrollView.requestDisallowInterceptTouchEvent(true);

return false; } });

 

Bu kodu ben netten arastirirken gordum. Fakat burdaki 

myScrollView

 yerine ne yazamam gerekkki ben xml de:

 <android.support.v4.view.ViewPager

            android:id="@+id/viewpager"           

            android:layout_width="fill_parent"

            android:layout_height="170dp"    >

        </android.support.v4.view.ViewPager>

 

boyle bir wiew pager tanimliyorum.O kodda scrool view yazan yere ne yazmam gerekki ? 

picture-399-1379511904.jpg
halil
26.09.2013 - 08:24

myViewPager.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_MOVE && myScrollView!=null){ myScrollView.requestDisallowInterceptTouchEvent(true); } return false; } });