2013-07-25 7 views
13

Czy istnieje sposób blokowania przewijania w pionie ListView podczas przewijania elementu, który jest ViewPager? A może zmienić poziomą czułość przewijania ViewPagera?Wyłącz ListView Przewijanie podczas przesuwania ViewPager

Dzięki.

OSTATNIA EDYCJA

Oto mój aktualizowane rozwiązanie. Dzięki za twoje odpowiedzi, Masoud Dadashi, twoje komentarze w końcu sprawiły, że wymyśliłem rozwiązanie mojego problemu.

Oto mój zwyczaj klasa ListView:

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

spojrzeć na tym stanowisku http://stackoverflow.com/questions/7900860/viewpager-in -a-listview-how-to-lock-the-scrolling-axis –

+0

dzięki, zajrzę w to. –

Odpowiedz

7

tak nie jest. utworzyć inną klasę customListView przedłużony z ListView i zastąpić jego obsługi zdarzeń dispatchTouchEvent tak:

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

następnie użyć tego customListView zamiast

+0

Próbowałem twojego rozwiązania, sprawdź moją aktualizację. –

+1

Podałem ci przykład wyłączania przewijania, ale najwyraźniej nie jestem wystarczająco jasny. W tej przesłoniętej metodzie powinieneś wykryć gest i wyłączyć przewijanie, jeśli jest to SWIPE. ponieważ kod jest dostępny pod poniższym adresem, nie duplikuję go. spójrz na ten adres: http://stackoverflow.com/questions/2646028/android-horizontalscrollview-within-scrollview-touch-handling –

+0

Zaktualizowałem swój post, postępowałem zgodnie z Twoimi instrukcjami i udało mi się w końcu osiągnąć pożądaną funkcjonalność. Dziękuję bardzo! –