onTouch事件的传递,以及一些很有用的监听

来源:互联网 发布:网络歌曲男歌手 编辑:程序博客网 时间:2024/06/05 19:24

1、点击事件:

touch的动作:
ACTION_DOWN //按下
ACTION_MOVE //移动
ACTION_UP //离开屏幕
ACTION_CANCEL //取消,不会由用户产生,而是由程序产生的

ViewGroup类会处理点击事件的主要有3个方法分别是:

public boolean dispatchTouchEvent(MotionEvent ev)      //用于事件的分发(一般不复写,复写之后返回true则按着屏幕会一直执行,返回false按着屏幕只执行一次。但返回truefalse都不会有事件传递给onInterceptTouchEvent。)public boolean onInterceptTouchEvent(MotionEvent ev)    //  用于事件的拦截(负责事件向下传递的方向,返回false则传递给下一层的dispatch方法。返回true则动作交给自己的onTouchEvent处理,后续事件不再经过,直接由dispatch传递给onTouchEvent。)public boolean onTouchEvent(MotionEvent ev)     //处理事件(负责事件向上的传递)

view类处理点击事件的方法只有两个:

public boolean dispatchTouchEvent(MotionEvent ev)      //用于事件的分发public boolean onTouchEvent(MotionEvent ev)     //处理事件

2、监听

比较有用的监听事件有:GestureDetector能比较优雅处理点击事件

public class LoopRelativeLayout extends RelativeLayout {    private GestureDetector mGesture;    public void setOnSingleTouchListener(OnSingleTouchListener mSingleTouch) {        this.mSingleTouch = mSingleTouch;    }    public LoopRelativeLayout(Context context, AttributeSet attrs,            int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);        mGesture = new GestureDetector(context, listener);    }    public LoopRelativeLayout(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        mGesture = new GestureDetector(context, listener);    }    public LoopRelativeLayout(Context context, AttributeSet attrs) {        super(context, attrs);        mGesture = new GestureDetector(context, listener);    }    public LoopRelativeLayout(Context context) {        super(context);        mGesture = new GestureDetector(context, listener);    }    @SuppressLint("ClickableViewAccessibility")    @Override    public boolean onTouchEvent(MotionEvent event) {        mGesture.onTouchEvent(event);        return true;    }    private GestureDetector.OnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {        @Override        public boolean onDown(MotionEvent e) {            Common.showsyso("onDown:手指点击屏幕就执行");            return false;        }        @Override        public boolean onSingleTapUp(MotionEvent e) {            Common.showsyso("onSingleTapUp:单击 onDown之后执行");            return false;        };        @Override        public void onShowPress(MotionEvent e) {            Common.showsyso("onShowPress:点击不抬起手指 onDown之后执行");        };        @Override        public void onLongPress(MotionEvent e) {            Common.showsyso("onLongPress:点击不抬起手指 onShowPress之后执行");        };        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {            Common.showsyso("onScroll:接触屏幕之后之后手指滑动  onDown之后执行");            return false;        };        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {            Common.showsyso("onFling:onScroll之后执行");            return false;        };        @Override        public boolean onSingleTapConfirmed(MotionEvent e) {            Common.showsyso("单击 ");            return false;        }        @Override        public boolean onDoubleTapEvent(MotionEvent e) {            Common.showsyso("双击 中的其中一下");            return false;        }        @Override        public boolean onDoubleTap(MotionEvent e) {            Common.showsyso("双击 ");            return false;        }    };  }

还有一个RotateGestureDetector监听:是用来处理手势的,缩放啥的。时间有限以后再详细的研究。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 抖音机型不支持怎么办 用nfc不支持卡片怎么办 移动怎么办省内流量包 手机交不了话费怎么办 淘宝快递不签收怎么办 快递买家不签收怎么办 淘宝退货未收货怎么办 淘宝退衣服运费怎么办 手机流量不到账怎么办 淘宝水果坏了怎么办 用微信充值话费充成空号了怎么办 苹果id被拉黑了怎么办 苹果app不退款怎么办 合同退款不退怎么办 微信充值q币被骗怎么办 小米手机存储空间不够怎么办 小米mix2s存储空间不够怎么办 进货一直没发票怎么办 魅蓝note5卡怎么办 电话费套餐花不了怎么办 墙和床头有间缝怎么办 床板里有虫子怎么办 松木床板味道大怎么办 寝室床板有虫子怎么办 胶合板当床板有气味怎么办 淘宝食品有问题怎么办 淘宝买东西碎了怎么办 被淘宝商家骚扰怎么办 闲鱼被别人拉黑怎么办 三无工厂抓到怎么办 淘宝买东西卖家不发货怎么办 打假人异地起诉怎么办 卖家拒绝发货怎么办 千牛发货收费怎么办 淘宝购物想退货怎么办 天猫超市发货怎么办 驾校退款乱收怎么办 驾校退款有疑问怎么办 物流消息不更新怎么办 退款了商家发货怎么办 打是12345没有用怎么办