首页 > 学院 > 开发设计 > 正文

GestureDetector简单使用

2019-11-06 09:47:36
字体:
来源:转载
供稿:网友
话说onTouch也可以记录按下抬起等简单的手势,但是太过简单且考虑到生命周期等的原因,故google专门为我们提供了一个手势类(GestureDetector)  它有两个接口 :                   1.OnGestureListener                                                               2.SimpleOnGestureListener区别在于第一个是完整的所有手势,第二个顾名思义就是简单的,常用的手势``` GestureDetector  gdt=new GestureDetector(mContext, new GestureDetector.OnGestureListener() {            @Override            public boolean onDown(MotionEvent e) {            //用户按下屏幕就会触发;                return false;            }            @Override            public void onShowPRess(MotionEvent e) {          //如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行            }            @Override            public boolean onSingleTapUp(MotionEvent e) {            //一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件                return false;            }            @Override            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {  //在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法        //    velocityX:X轴上的移动速度,像素/秒        //    velocityY:Y轴上的移动速度,像素/秒                  return false;            }            @Override            public void onLongPress(MotionEvent e) {           //长按            }            @Override            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {          //       滑屏,用户按下触摸屏、快速移动后松开         //        velocityX:X轴上的移动速度,像素/秒        //        velocityY:Y轴上的移动速度,像素/秒                   return false;            }        });```定义好上面的代码。最后在Activity中的onTouch中将事件交给GestureDetector就可以了```public boolean onTouch(View v, MotionEvent event) {      return gdt.onTouchEvent(event);     }  ```如何在Fragment中使用GestureDetector?   思路:在Activity中创建接口,将onTouch的事件传递到接口的方法,调用方在实现接口并传入自己的GestureDetector即可 1.创建接口:```    //在Activity的dispatchTouchEvent方法中将event事件传递给实现接口的那一方    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        for (MyOnTouchListener listener : onTouchListeners) {            listener.onTouch(ev);        }        return super.dispatchTouchEvent(ev);    }    //绑定监听    public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {        onTouchListeners.add(myOnTouchListener);    }    //取消监听    public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {        onTouchListeners.remove(myOnTouchListener);    }    public interface MyOnTouchListener {        public boolean onTouch(MotionEvent ev);    }``` 2.在Fragment中使用手势```     /**创建手势*/        gdt = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() {            @Override            public void onLongPress(MotionEvent e) {                super.onLongPress(e);                shifoushuaxing = false;            }            @Override            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {                shifoushuaxing = true;                return true;            }        });        //实现接口        MainActivity.MyOnTouchListener myOnTouchListener = new MainActivity.MyOnTouchListener() {            @Override            public boolean onTouch(MotionEvent ev) {                boolean result = gdt.onTouchEvent(ev);                return result;            }        };        //绑定        ((MainActivity) getActivity())                .registerMyOnTouchListener(myOnTouchListener);```
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表