3

私のviewFlipperでは、いくつかのTextViewが動的にロードされます。サイズが異なる場合があります。つまり、viewFlipper の下にスペースが残っている可能性があります (スクリーンショットの緑色の部分を参照)。

スクリーンショット

灰色の部分(viewflipper)をスワイプしたときだけでなく、緑色の部分をスワイプしたときにも onFling メソッドを呼び出してほしい

私のレイアウトは次のようになります。

<?xml version="1.0" encoding="utf-8"?>

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/root">


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

 </RelativeLayout>

私のonCreateでは、これを行います:

this.viewFlipper = (ViewFlipper) this.findViewById(R.id.viewFlipper);

    this.gestureDetector = new GestureDetector(new MyGestureDetector());

    RelativeLayout root = (RelativeLayout) this.findViewById(R.id.root);
    root.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (gestureDetector.onTouchEvent(event)) {
                Log.d("root", "true");
                return false;
            } else {
                Log.d("root", "false");
                return false;
            }
        }
    });

これまでのところ、true になっても false を返そうとしました。これにより、viewflipper の外でスワイプが行われた場合でも、イベントが消費されず、viewFlipper に渡されません。

viewFlipper は明示的な onTouchListener を必要としないことに注意してください。1つでもなくても機能します(理由はよくわかりません..)

誰も何をすべきか知っていますか?

4

1 に答える 1

8

android:clickable="true"あなたに追加してみてくださいRelativeLayout。それができるはずです。

それでもうまくいかない場合は、これら 2 つのメソッドも実装する必要があるかもしれません (まだ実装していない場合)。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    //TouchEvent dispatcher.
    if (gestureDetector != null) {
        if (gestureDetector.onTouchEvent(ev))
            //If the gestureDetector handles the event, a swipe has been executed and no more needs to be done.
            return true;
    }
    return super.dispatchTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}
于 2011-09-30T11:36:59.157 に答える