1

私のアプリケーションには、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;
            }
        });
4

1 に答える 1

0

私の場合、HorizontalPager内部ListViewヘッダーがあります。ListView がタッチ イベントを取得し、ページャーがフリーズします。オプションでカスタムListViewを実装することで問題を解決しました。scrollingEnabled

public class StoppableListView extends ListView {
    public boolean scrollingEnabled = true;
    YourActivity parent;

    public StoppableListView(Context context) { super(context); parent = (CalendarActivity)context; }
    public StoppableListView(Context context, AttributeSet attrs) { super(context, attrs); parent = (CalendarActivity)context; }
    public StoppableListView(Context context, AttributeSet attrs, int defStyle) { super(context,attrs); parent = (CalendarActivity)context; }


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (scrollingEnabled) return super.dispatchTouchEvent(ev);
        // dispatch touch event to your view
        else return parent.yourView.dispatchTouchEvent(ev);
    }

} 

ページャーがアクティブなときに設定するlistView.scrollingEnabled = falseと、イベントがページャーに適切にディスパッチされます。

于 2013-03-22T13:23:17.883 に答える