2013-07-25 41 views
13

'u kaydırırken kaydırma işlemi, bir ViewPager öğesi olan bir öğeyi kaydırırken bir ListView'ün dikey kaydırmasını kilitlemenin bir yolu var mı? Ya da belki de ViewPager'ın yatay kaydırma hassasiyetini değiştirir misiniz?ListView'ü Devre Dışı Bırakma ViewPager

Teşekkürler.

SON DÜZENLEME

İşte benim güncelleştirilmiş bir çözümdür. Cevaplarınız için teşekkürler Masoud Dadashi, yorumlarınız nihayet benim sorunuma bir çözüm buldu.

public class FolderListView extends ListView { 

    private float xDistance, yDistance, lastX, lastY; 

    // If built programmatically 
    public FolderListView(Context context) { 
     super(context); 
     // init(); 
    } 

    // This example uses this method since being built from XML 
    public FolderListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // init(); 
    } 

    // Build from XML layout 
    public FolderListView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // init(); 
    } 

    @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); 

    } 
} 
+0

Bak http://stackoverflow.com/questions/7900860/viewpager-in kullanmak -bir liste-nasıl-kilitleme-kaydırma-eksen –

+0

teşekkürler, ben bunun içine bakacağız. –

cevap

7

evet var:

İşte benim özel ListView sınıftır. Böyle kendi dispatchTouchEvent olay işleyicisi ListView uzanan başka customListView sınıf oluşturmak ve geçersiz:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev){ 
    if(ev.getAction()==MotionEvent.ACTION_MOVE) 
     return true; 
    return super.dispatchTouchEvent(ev); 
} 

sonra bu customListView Bu karakola yerine

+0

Çözümünüzü denedim, lütfen güncellememi kontrol edin. –

+1

Size bir devre dışı bırakma kaydırma örneği verdim, ancak görünüşe göre yeterince açık değilim. Bu geçersiz kılma yönteminde, hareketi algılamalı ve SWIPE ise kaydırmayı devre dışı bırakmalısınız. Aşağıdaki adreste kod bulunduğundan, çoğaltmıyorum. Bu adrese bakın: http://stackoverflow.com/questions/2646028/android-horizontalscrollview-within-scrollview-touch-handling –

+0

Gönderiyi güncelledim, talimatlarınızı takip ettim ve nihayet istenen işlevselliği elde ettim. Çok teşekkür ederim! –

İlgili konular