在我的应用程序中,我有一个 listView。我有一个 ViewFlipper,它是 ListView 的标题。
我希望 ViewFlipper 在用户触摸并滑动时切换视图。此外,ViewFlipper 的项目是可点击的。我的问题是我的 ListView 也是可滚动的,但垂直且可点击。
这是一个架构:
首先,我尝试使用 OnTouchEvent。它不起作用,因为即使用户触摸 ViewFlipper 的屏幕 OUT 也会调用该方法。
现在,如果我使用 OuTouchListener,我无法截获用户的手势,也无法弄清楚。
下面是 listView 标头的 XML 代码示例:
<ViewFlipper
android:id="@+id/flipune"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="3" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemviewflipper1"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:background="@android:color/transparent"
android:contentDescription="@string/stritemviewflipper" />
<TextView
android:id="@+id/titreviewflipper1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/itemviewflipper1"
android:background="#AA000000"
android:paddingTop="10dip"
android:textColor="#ffffffff"
android:textSize="12dip"
android:textStyle="bold" >
</TextView>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemviewflipper2"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:background="@android:color/transparent"
android:contentDescription="@string/stritemviewflipper" />
<TextView
android:id="@+id/titreviewflipper2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/itemviewflipper2"
android:background="#AA000000"
android:paddingTop="10dip"
android:textColor="#ffffffff"
android:textStyle="bold" >
</TextView>
</RelativeLayout>
[...]
</ViewFlipper>
我在活动中定义了 OnTouchListener :
viewFlipper.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent touchevent) {
switch (touchevent.getAction()) {
case MotionEvent.ACTION_DOWN: {
oldTouchValue = touchevent.getX();
break;
}
case MotionEvent.ACTION_UP: {
float currentX = touchevent.getX();
if (touchevent.getY() < metrics.heightPixels / 3) {
if (!viewFlipper.isPressed() && oldTouchValue == currentX) {
openDescriptionArticle(index);
} else {
if (oldTouchValue < currentX) {
viewFlipper.setInAnimation(AnimationHelper
.inFromLeftAnimation());
viewFlipper.setOutAnimation(AnimationHelper
.outToRightAnimation());
viewFlipper.showPrevious();
if (index > 0) {
index--;
} else {
index= 4;
}
}
if (oldTouchValue > currentX) {
viewFlipper.setInAnimation(AnimationHelper
.inFromRightAnimation());
viewFlipper.setOutAnimation(AnimationHelper
.outToLeftAnimation());
viewFlipper.showNext();
if (index < 4) {
index++;
} else {
index = 0;
}
}
}
}
break;
}
}
return false;
}
});