手势侧滑

   当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。

一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根据用户触摸的轨迹去判断是什么手势)。

Android sdk给我们提供了GestureDetector(Gesture:手势Detector:识别)类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。虽然他能识别手势,但是不同的手势要怎么处理,应该是提供给程序员实现的

 

先定义private GestureDetector gesturedetector;

 

设置在图片上侧滑

iv = (ImageView) v.findViewById(R.id.introduction);

iv.setOnTouchListener(new View.OnTouchListener() {

    @Override

      通过onTouch()函数可以获取基本的触屏事件

    public boolean onTouch(View v, MotionEvent event) {

          将触屏事件交给GestureDetector处理

        gesturedetector.onTouchEvent(event);

        return true;

    }

});

 

class MyonGestureListener extends GestureDetector.SimpleOnGestureListener{

    @Override

     onFling是抛,飞一般的滑动,前两个参数和onScroll相同,e2为用户拖动完离开屏幕时的点。veloctiyX,velocitY为离开屏幕时的初始速度,以这两个速度为初始速度做匀减速运动

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        if (velocityX > 0) {

            gotoMain();

            return true;

        }

        return false;

         这些返回值会通过 mGestureDetector.onTouchEvent(event); 传递给onTouch。

    }

    @Override

e1为第一次按下的事件,和onDown事件里面的一样,e2为当前的事件,distanceX为本次onScroll移动的X轴距离,distanceY为移动的Y轴距离,移动的距离是相对于上一次onScroll事件的移动距离,而不是当前点和按下点的距离。这次滑动最后触发了onFling事件,但是onFling事件的触发不是一定的,onFling是在ACTION_UP触发,平时列表在离开屏幕是继续滚动,就是通过这种方式触发。

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

        if (Math.abs(distanceX) > Math.abs(distanceY) && distanceX > 0) {

            gotoMain();

            return true;

        }

        return false;

    }

    private void gotoMain(){

        getApp().getPreferences().setBoolean(Preferences.KEY_FIRST_USE, false);

        startActivity(new Intent(getActivity(), MainActivity.class));

        getActivity().finish();

    }

}


你可能感兴趣的:(Android基础)