博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 手势识别
阅读量:7197 次
发布时间:2019-06-29

本文共 3101 字,大约阅读时间需要 10 分钟。

 

public class MyGesture extends SimpleOnGestureListener {    private GestureDetector gd;    // onGestureListener需要F和onTouchListener配合使用,实际上是onTouchListenerF监听到用户的    // 触摸,他把他所有监听到的用户触摸通知"手势识别"类对象,手势识别类对象处理后触发对应的函数,例如onFling, onLongPress等等。    public void test(MotionEvent ev) {        gd.onTouchEvent(ev);    }    // GestureDetector默认是打开LongPress通知的,但是有个问题,长按后,手不离开屏幕且滑动,这个时候发现没有滑动事件。    // 这个问题的解决办法是设置手势识别对象,禁止产生长按事件    // gd.setIsLongpressEnabled(false);    // 当然,没有禁用长按事件,滑动事件还是有效的,只是要确保触屏后马上滑动,不要等系统产生了长按。    public final class GestureListener implements OnGestureListener {        @Override        public boolean onDown(MotionEvent e) {            // 触摸屏按下时立刻触发            return false;        }        @Override        public void onShowPress(MotionEvent e) {            // 短按,触摸屏按下后片刻后抬起,会触发这个手势,如果迅速抬起则不会;强调的是没有松开或者拖动的状态,由一个ACTION_DOWN触发        }        @Override        public boolean onSingleTapUp(MotionEvent e) {            // 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势)            return false;        }        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2,                float distanceX, float distanceY) {            // 用户按下触摸屏,并拖动,由1个 ACTION_DOWN, 多个ACTION_MOVE触发            return false;        }        @Override        public void onLongPress(MotionEvent e) {            // 长按,触摸屏按下后既不抬起也不移动,由多个 ACTION_DOWN触发        }        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                float velocityY) {            // 滑动,触摸屏按下后快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势            // 参数解释:            // e1:第1个ACTION_DOWN MotionEvent            // e2:最后一个ACTION_MOVE MotionEvent            // velocityX:X轴上的移动速度,像素/秒            // velocityY:Y轴上的移动速度,像素/秒            return false;        }    }    public final class DoubleTapListener implements OnDoubleTapListener {        @Override        public boolean onSingleTapConfirmed(MotionEvent e) {            // 单击确认,即很快的按下并抬起,但并不连续点击第二下            return false;        }        @Override        public boolean onDoubleTap(MotionEvent e) {            // 双击,手指在触摸屏上迅速点击第二下时触发            return false;        }        @Override        public boolean onDoubleTapEvent(MotionEvent e) {            // 双击事件发生的时候,按下和抬起各触发一次            return false;        }        // 对于自定义View,使用手势识别有两处陷阱可能会浪费你的不少时间。        // 1:View必须设置longClickable为true,否则手势识别无法正确工作,只会返回Down, Show, Long三种手势        // 2:必须在View的onTouchListener中调用手势识别,而不能像Activity一样重载onTouchEvent,否则同样手势识别无法正确工作        public class MyView extends View {            private GestureDetector mGestureDetector;            public MyView(Context context, AttributeSet attrs) {                super(context, attrs);                mGestureDetector = new GestureDetector(context, null);                setLongClickable(true);                this.setOnTouchListener(new OnTouchListener() {                    public boolean onTouch(View v, MotionEvent event) {                        return mGestureDetector.onTouchEvent(event);                    }                });            }        }    }}

 

转载于:https://www.cnblogs.com/a284628487/p/3299773.html

你可能感兴趣的文章
LINUX下查看CPU使用率的命令
查看>>
很好的IT技术网站
查看>>
css3 动画效果
查看>>
yum 安装rrdtool
查看>>
使用awstats分析nginx日志
查看>>
Linux系统裁剪笔记之四busybox
查看>>
Package Pdksh-5.12 missing
查看>>
Pyython subprocess模块学习总结
查看>>
数组and链表
查看>>
windows redis 集群搭建(二)
查看>>
Lync在线用户查询
查看>>
RSA2012系列(2):HP谈他们的安全智能平台
查看>>
表单元素(控件)不可见,你用visibility还是display?
查看>>
android 的四种枚举Context.MODE_PRIVATE
查看>>
IHS:到2022年云服务市场将达3740亿美元
查看>>
Centos 6.5全新安装firefox45.2浏览器脚本
查看>>
mysql存储过程
查看>>
懒惰之罪
查看>>
路由知识的总结
查看>>
UITextView内边距设置
查看>>