【问题标题】:CustomView overriding onTouch() and setting additional GestureDetector via setOnTouchListener()CustomView 覆盖 onTouch() 并通过 setOnTouchListener() 设置其他 GestureDetector
【发布时间】:2017-08-29 20:21:09
【问题描述】:

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

  1. 我想重写 onTouch() 方法来在视图中实现一些与触摸手势相关的绘图逻辑。
  2. 我想使用这种自包含的自定义视图附加到它 GestureDetector 来检测和处理 Activity 中此视图上的一些自定义手势。

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

【问题讨论】:

    标签: android android-custom-view gesturedetector


    【解决方案1】:

    你可以这样想:

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

    【讨论】:

    • 这让我想到了一些我认为的解决方案。我在 CustomTouchView() 构造函数中使用了 setOnTouchListener(this) 并实现了 onTouch()。所以我改为制作自定义私有字段 TouchViewGestureDetector,并添加 setter 方法 setTouchViewGestureDetector(detector)。然后在 CustomTouchView 的 onTouch 覆盖中,我添加了 if(mGestureDetector != null) mGestureDetector.onTouch(event);
    • @MichałZiobro 如果对您有帮助,请随时标记我的答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多