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;
}
}