0

Android 4.0.3 プロジェクトで新しく作成された SurfaceView にタッチ イベントを渡すことは可能ですか。

もっと正確に言いましょう。

着信イベントを処理するカスタム OnTouchListener を作成しました。ACTION_DOWN イベントは、カスタム SurfaceView をインスタンス化し、それを他のすべてのビューの上に追加します (これは正常に機能します)。SurfaceView は ACTON_MOVE を処理し、ACTION_UP でリスナーに通知する必要があります。SurfaceView を追加した後、元の OnTouchListener を削除する必要があります。

DispatchTouchEvent で TouchEvent を渡そうとしましたが、これは継続的に行う場合にのみ機能します。説明されている動作を実装することは可能ですか?また、それを行う最善の方法は何ですか?

よろしくお願いします。

ここにいくつかのコードがあります:

タッチリスナー:

OnTouchListener onTouchListener = new OnTouchListener() {


    public boolean onTouch (View v, MotionEvent event) {

        int action = event.getAction();

        switch (action) {

        case MotionEvent.ACTION_DOWN:
            surfaceView = new CustomSurfaceView(this.getActivity(), drawer);
            surfaceView.setZOrderOnTop(true);
            surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT);

            overlayContainer.addView(surfaceView);
            btnView.setOnTouchListener(null);

            return surfaceView.dispatchTouchEvent(event);;

        default:
            return false;
        }
    }
};


btnView.setOnTouchListener(onTouchListener);

サーフェス ビュー:

@Override
public boolean onTouchEvent (MotionEvent event) {

    switch (action) {

    case MotionEvent.ACTION_MOVE:

        x = (int) event.getX();
        y = (int) event.getY();

        return true;

    case MotionEvent.ACTION_UP:

        // TODO:notify Listener
        return true;


    default:
        return false;
    }
}
4

1 に答える 1

0

新しく作成されたオブジェクトに touchevent を渡すだけです。そのオブジェクト内で、サーフェスの準備ができているかどうかを確認する必要があります。準備ができている場合は true を渡し、外部クラスも true などを返すことができるようにします。

タッチイベントは常にはしごの下に渡し、そこから発生させないようにしてください。

于 2012-10-22T17:17:48.843 に答える