【问题标题】:Pass TouchEvent to newly created SurfaceView将 TouchEvent 传递给新创建的 SurfaceView
【发布时间】:2012-10-22 16:46:22
【问题描述】:

是否可以在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;
    }
}

【问题讨论】:

  • 请尽可能在您的问题中包含代码,这样人们更有可能为您提供高质量的答案

标签: android surfaceview touch-event


【解决方案1】:

只需将 touchevent 传递给新创建的对象。在该对象中,您应该检查表面是否准备好。如果它准备好了,则传递 true 以便外部类也可以返回 true 等。

始终将 touchevents 向下传递,永远不要让它们从那里开始。

【讨论】:

  • 我必须在我的自定义 OnTouchListener 中使用 dispatchTouchEvent 将 ACTION_MOVE 事件连续传递给 surfaceView,还是有更好的方法来避免这种情况?
  • 在我的三星 s2 上,如果我在屏幕上拖动手指,每移动 4 个像素就会释放一次触摸事件(移动)。因此,用户将手指移到显示屏上会发生很多触摸事件,是的,您应该将它们全部传递给需要它们的类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多