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 等。

始终将 touchevents 向下传递,永远不要让它们起源于那里。

于 2012-10-22T17:17:48.843 回答