2012-12-11 107 views
1

在我的android應用程序中,我有一個ViewFlipper活動。在Viewflipper內部我有3個線性佈局。android onscroll手勢檢測器

<ViewFlipper 
    android:id="@+id/viewFlipper" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginBottom="20dip" 
      android:text="@string/publicas" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ListView 
      android:id="@+id/listViewDemandasPublicas" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginBottom="20dip" 
      android:text="@string/pendientes" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ListView 
      android:id="@+id/listViewDemandasPendientes" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginBottom="20dip" 
      android:text="@string/pendientes" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ListView 
      android:id="@+id/listViewDemandasFinalizadas" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

</ViewFlipper> 

所以我想改變包含當我滾動horizo​​ntaly的ViewFlippers。所以我有一個手勢檢測器和一個手勢監聽器。它工作正常,即使我有一個ListView裏面(我在另一個活動中完成)。我onScroll methos是下一個:

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
ViewFlipper vf = (ViewFlipper) getWindow().findViewById(R.id.viewFlipper); 
    View view = null; 
    if ((e1.getX() < e2.getX()) && (distanceX < -20)) { // dedo a la derecha 
     Log.i("ListaDemandas", "Muevo a la derecha SCROLL"); 
     if (esPendientes) { 
      esPendientes = false; 
      esEntrada = true; 
      verPublicas(view); 
      vf.setInAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_right_in)); 
      vf.setOutAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_right_out)); 
      vf.showPrevious(); 
     } else if (esFinalizadas) { 
      esFinalizadas = false; 
      esPendientes = true; 
      verPendientes(view); 
      vf.setInAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_right_in)); 
      vf.setOutAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_right_out)); 
      vf.showPrevious(); 
     } 
    } else if ((e1.getX() > e2.getX()) && (distanceX > 20)) { 
     Log.i("ListaDemandas", "Muevo a la izquierda SCROLL"); 
     if (esPendientes) { 
      esPendientes = false; 
      esFinalizadas = true; 
      verFinalizadas(view); 
      vf.setInAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_left_in)); 
      vf.setOutAnimation(AnimationUtils.loadAnimation(getParent(), .anim.push_left_out)); 
      vf.showNext(); 
     } else if (esEntrada) { 
      esEntrada = false; 
      esPendientes = true; 
      verPendientes(view); 
      vf.setInAnimation(AnimationUtils.loadAnimation(getParent(), R.anim.push_left_in)); 
      vf.setOutAnimation(AnimationUtils.loadAnimation(getParent(), .anim.push_left_out)); 
      vf.showNext(); 
     } 
    } 
    return true; 
} 

我的問題是onScroll被稱爲(當然)每次滾動的距離大於20。所以,如果我做一個長長的畫卷,每次我的滾動運動大於20的方法被稱爲。因此,如果我的滾動距離爲50,則在21,22,23中調用該方法。...

如何管理此方法以僅調用一次該方法?我一直在閱讀API,並且一直在嘗試控制MotionEvent時間,但這不是一個好的解決方案,因爲我可以製作兩個快速卷軸。我也見過addBatch方法。這是我的解決方案?任何人都知道我怎樣才能將所有呼叫批量加入一個?任何「手工」方式?

謝謝

======================================== ================================================== ===================

編輯:

我在一個手工的方式解決它。一個使用true newScroll初始化的布爾值。所以當我做一個滾動我把它放到false和onDown()我把它再次成真。所以:

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    ViewFlipper vf = (ViewFlipper) getWindow().findViewById(R.id.viewFlipper); 
    if (scrollNuevo) { 

     if ((e1.getX() < e2.getX()) && (distanceX < -20)) {     
      Log.i("ListaDemandas", "Muevo a la derecha SCROLL"); 
      scrollNuevo = false; Log.i("ListaDemandas","ScrollNuevo=false"); 
      if (esPendientes) { 
    ... 

而且方法onDown:

@Override 
public boolean onDown(MotionEvent e) { 
    scrollNuevo = true;Log.i("ListaDemandas","ScrollNuevo=true"); 
    return true; 
} 
+2

我會強烈建議你在英語使用的變量名! – Mulgard

回答

1

我在一個手工的方式解決它。一個使用true newScroll初始化的布爾值。所以當我做一個滾動我把它放到false和onDown()我把它再次成真。所以:

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    ViewFlipper vf = (ViewFlipper) getWindow().findViewById(R.id.viewFlipper); 
    if (scrollNuevo) { 

     if ((e1.getX() < e2.getX()) && (distanceX < -20)) {     
      Log.i("ListaDemandas", "Muevo a la derecha SCROLL"); 
      scrollNuevo = false; Log.i("ListaDemandas","ScrollNuevo=false"); 
      if (esPendientes) { 
    ... 

而且方法onDown:

@Override 
public boolean onDown(MotionEvent e) { 
scrollNuevo = true;Log.i("ListaDemandas","ScrollNuevo=true"); 
return true; 
}