CustomView 覆盖 onTouch() 并通过 setOnTouchListener() 设置额外的 GestureDetector

CustomView overriding onTouch() and setting additional GestureDetector via setOnTouchListener()

是否可以创建自定义视图,既覆盖此自定义视图实现中的函数 onTouch(),又允许通过 setOnTouchListener() 设置自定义 GestureDetector。

  1. 我想覆盖 onTouch() 方法以在视图中实现一些与触摸手势相关的绘图逻辑。
  2. 比我想使用这样的独立自定义视图附加到它的 GestureDetector 来检测和处理这个视图内部的一些自定义手势 Activity。

只有当我有 onTouch() 绘图实现,或者只有 setOnTouchListener() 来检测手势时,它才对我有用。也许我可以将这个手势检测放在视图中。但我更愿意将其作为单独的松耦合可重用组件,而不是紧密耦合的手势检测器。

你可以这样做:

public class CustomTouchView extends View {

    private OnTouchListener onTouchListener;

    public CustomTouchView(Context context) {
        super(context);
    }

    @Override
    public void setOnTouchListener(OnTouchListener l) {
        super.setOnTouchListener(l);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (onTouchListener != null) {
            return onTouchListener.onTouch(this, event);
        } else {
            return super.onTouchEvent(event);
        }

        // or implement your custom touch logic here 
    }
}