2013-07-25 4 views
13

C'è un modo per bloccare lo scorrimento verticale di un ListView mentre si scorre un oggetto che è un ViewPager? O forse cambia la sensibilità di scorrimento orizzontale di ViewPager?Disattiva ListView Scorrimento quando si scorre ViewPager

Grazie.

ultima modifica

Ecco la mia soluzione aggiornata. Grazie per le vostre risposte, Masoud Dadashi, i vostri commenti mi hanno finalmente permesso di trovare una soluzione al mio problema.

Ecco il mio personalizzato classe 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

un'occhiata a questo post http://stackoverflow.com/questions/7900860/viewpager-in -a-listview-how-to-lock-the-scrolling-axis –

+0

grazie, lo esaminerò. –

risposta

7

Sì c'è. creare un'altra classe customListView esteso da ListView e ignorare il suo gestore di eventi dispatchTouchEvent come questo:

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

quindi utilizzare questo customListView invece

+0

ho provato la soluzione, controlla il mio aggiornamento. –

+1

Ti ho dato un esempio di scrolling disabilitante ma a quanto pare non sono abbastanza chiaro. In quel metodo sottoposto a override dovresti rilevare il gesto e disabilitare lo scorrimento se è SWIPE. poiché il codice è disponibile nell'indirizzo qui sotto non lo sto duplicando. guarda questo indirizzo: http://stackoverflow.com/questions/2646028/android-horizontalscrollview-within-scrollview-touch-handling –

+0

Ho aggiornato il mio post, ho seguito le tue istruzioni e finalmente sono riuscito a ottenere la funzionalità desiderata. Grazie mille! –