如何在Android中向视图添加手势检测器

如何在Android中向视图添加手势检测器,第1张

概述我正在努力为我的项目中的子视图添加手势检测器.我是否覆盖父母的onTouchEvent或孩子的onTouchEvent?我是否制作OnTouchListener并在那里添加手势检测器? documentation显示了如何向活动本身添加手势检测器的示例,但不清楚如何将其添加到视图中.如果继承视图(例如 here),则可以使用相同的过程,但我想添加手势而不进行子类化. This是我能找到的最接近的其 我正在努力为我的项目中的子视图添加手势检测器.我是否覆盖父母的ontouchEvent或孩子的ontouchEvent?我是否制作OntouchListener并在那里添加手势检测器? documentation显示了如何向活动本身添加手势检测器的示例,但不清楚如何将其添加到视图中.如果继承视图(例如 here),则可以使用相同的过程,但我想添加手势而不进行子类化.

This是我能找到的最接近的其他问题,但它特定于ImageVIEw上的一个fling手势,而不是任何VIEw的一般情况.关于何时返回真或假的答案也存在一些分歧.

为了帮助自己了解它是如何工作的,我做了一个独立的项目.我的答案如下.

解决方法 此示例显示如何向视图添加手势检测器.布局只是Activity内部的一个VIEw.您可以使用相同的方法将手势检测器添加到任何类型的视图.

我们将手势检测器添加到绿色视图中.

MainActivity.java

基本思想是在视图中添加OnTouchListener.通常我们会在这里获得所有原始触摸数据(如ACTION_DOWN,ACTION_MOVE,ACTION_UP等),但我们不会自己处理它,而是将其转发到手势检测器以对触摸数据进行解释.

我们正在使用SimpleOnGestureListener.这个手势探测器的好处是我们只需要覆盖我们需要的手势.在这里的例子中,我包含了很多.您可以删除不需要的那些. (你应该总是在onDown()中返回true.返回true表示我们正在处理事件.返回false将使系统停止向我们提供更多@R_403_6825@.)

public class MainActivity extends AppCompatActivity {    private GestureDetector mDetector;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        // this is the vIEw we will add the gesture detector to        VIEw myVIEw = findVIEwByID(R.ID.my_vIEw);        // get the gesture detector        mDetector = new GestureDetector(this,new MyGestureListener());        // Add a touch Listener to the vIEw        // The touch Listener passes all its events on to the gesture detector        myVIEw.setontouchListener(touchListener);    }    // This touch Listener passes everything on to the gesture detector.    // That saves us the trouble of interpreting the raw touch events     // ourselves.    VIEw.OntouchListener touchListener = new VIEw.OntouchListener() {        @OverrIDe        public boolean ontouch(VIEw v,MotionEvent event) {            // pass the events to the gesture detector            // a return value of true means the detector is handling it            // a return value of false means the detector dIDn't             // recognize the event            return mDetector.ontouchEvent(event);        }    };    // In the SimpleOnGestureListener subclass you should overrIDe     // onDown and any other gesture that you want to detect.    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {        @OverrIDe        public boolean onDown(MotionEvent event) {            Log.d("TAG","onDown: ");            // don't return false here or else none of the other             // gestures will work            return true;        }        @OverrIDe        public boolean onSingleTapConfirmed(MotionEvent e) {            Log.i("TAG","onSingleTapConfirmed: ");            return true;        }        @OverrIDe        public voID onLongPress(MotionEvent e) {            Log.i("TAG","onLongPress: ");        }        @OverrIDe        public boolean onDoubleTap(MotionEvent e) {            Log.i("TAG","onDoubleTap: ");            return true;        }        @OverrIDe        public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) {            Log.i("TAG","onScroll: ");            return true;        }        @OverrIDe        public boolean onFling(MotionEvent event1,MotionEvent event2,float veLocityX,float veLocityY) {            Log.d("TAG","onFling: ");            return true;        }    }}

这是一个快速设置来运行这个项目,所以我建议你试一试.请注意日志事件的发生方式和时间.

总结

以上是内存溢出为你收集整理的如何在Android中向视图添加手势检测器全部内容,希望文章能够帮你解决如何在Android中向视图添加手势检测器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存