2

今日、Android カスタム ビューでのタッチ イベント処理に問題が発生しました。この場合、親ビュー呼び出し weekview とチルド呼び出し weekdayview を作成しました。親ビューをスクロールしたいのですが、両方のビューでタッチイベントを実装すると機能しません。

ここに画像の説明を入力

誰でもこれについて私を助けることができます.それは私にとって本当に役に立ちます. ありがとうございました

4

2 に答える 2

2
class ChildView extends View {


    public void setGestureDetector (GestureDetector g)
    {
        gesture = g;
    }

    @Override
    public boolean onTouchEvent (....)
    {
        return gesture.onTouchEvent (....); // touch event will dispatch to gesture
    } 
}

class ParentView extends View implements GestureDetector.OnGestureListener {

    gesture = new GestureDetector (this);

    child = new ChildView (...);
    child.setGestureDetector (gesture);

    @Override
    public boolean onTouchEvent (..)
    {
       // handle your parent touch event here
    }

    public boolean onDown (...)
    {
       return true;
    }

    public boolean fling (...) 
    {
       // here to handle child view fling
    }


}

これは、GestureDetectorを使用するための概念を示すためのペソコード(実際のAndroid Javaではありません)です。親ビューの子ビューからすべてのイベントを処理できます。私がAndroidスマートフォンでテストしたところ、ChildViewのonTouchEventはACTION_UPをうまく認識しなかったため、Child Viewをスワイプしても、フリングが機能しない場合があります(ACTION_UPによって異なります)。

したがって、Child Viewでより正確なスワイプを記述したい場合は、owen Gesture Detectクラスを記述し、ChildViewでこれを行うことができます-

float oldX;
float distanceX;

public boolean onTouchEvent (MotionEvent event...)
{
     if (event.getAction == MotionEvent.ACTION_DOWN) {
        // handle down
        oldX = event.getX ();
     }

     if (event.getAction == MotionEvent.ACTION_MOVE {
        // handle move
        distanceX = event.getX() - oldX; // more accurate

        gesture.onSwipe (distanceX); // your own gesture class
     }


}
于 2012-09-12T05:50:13.803 に答える
0

スワイプの速度を設定し (ユーザーのスワイプの意図を検出するため)、子ビューで onTouchEvent() をオーバーライドします。ここで、super.onTouchEvent() を呼び出して戻ります。これにより、親ビューが呼び出されます。親ビューでイベントを処理します。

于 2012-09-12T05:31:08.513 に答える