您的位置:首页 > 其它

GestureDetector简单使用

2017-02-28 00:59 141 查看
话说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 = fa
9f55
lse;

            }

            @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);

```
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: