私のアプリケーションには、listViewがあります。ListViewのヘッダーであるViewFlipperがあります。
ユーザーがViewFlipperに触れてスライドしたときに、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;
}
});