在我的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>
所以我想改變包含當我滾動horizontaly的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;
}
我會強烈建議你在英語使用的變量名! – Mulgard