Hello Turing-Tang

吾日三省吾身,以求本心昭昭!

android监听左右滑动事件

今天在做监听左右滑动的时候,在网上找了几篇帖子,然后按照拿上面的操作,但是总是莫名其妙的监听不了,真的是把人都气疯,但是最后凭着我坚强的毅力最后把这个问题解决了,所以特此在这个地方写一篇博客记录一下这个事件。参考博客
首先,你得创建一个android.view.GestureDetector(Gesture:手势Detector:识别)类的对象用来监听手示动作。代码如下

mGestureDetector = new GestureDetector(this, myGestureListener);

这里的myGestureListener是GestureDetector.SimpleOnGestureListener的一个对象,用来识别各种手势动作,源码中SimpleOnGestureListener实现的是OnGestureListener, OnDoubleTapListener这两个接口,如果你只是做检测左右滑动可以去只实现OnGestureListener,然后覆盖public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)方法
代码如下:

GestureDetector.SimpleOnGestureListener myGestureListener = new GestureDetector.SimpleOnGestureListener(){
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            Log.e("<--滑动测试-->", "开始滑动");
            float x = e1.getX()-e2.getX();
            float x2 = e2.getX()-e1.getX();
            if(x>FLING_MIN_DISTANCE&&Math.abs(velocityX)>FLING_MIN_VELOCITY){
                  Toast.makeText(HuadongTestActivity.this, "向左手势", Toast.LENGTH_SHORT).show();  

                  startActivity(new Intent(HuadongTestActivity.this,HuadongOtherActivity.class));

            }else if(x2>FLING_MIN_DISTANCE&&Math.abs(velocityX)>FLING_MIN_VELOCITY){
                 Toast.makeText(HuadongTestActivity.this, "向右手势", Toast.LENGTH_SHORT).show(); 
            }

            return false;
        };
    };

解释一下onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)的四个参数
原来的英文解释

@param e1 The first down motion event that started the fling.
@param e2 The move motion event that triggered the current onFling.
@param velocityX The velocity of this fling measured in pixels per second
along the x axis.
@param velocityY The velocity of this fling measured in pixels per second
along the y axis.

@param e1 表示手势起点的移动事件 可以得到移动的起始位置的坐标
@param e1 当前手势点的移动事件 可以得到移动结束时的位置坐标
@param velocityX 每秒x轴方向移动的像素
@param velocityY 每秒y轴方向移动的像素

float x = e1.getX()-e2.getX();
float x2 = e2.getX()-e1.getX();     if(x>FLING_MIN_DISTANCE&&Math.abs(velocityX)>FLING_MIN_VELOCITY)

这段代码表示移动的距离大于自己规定的最小距离,并且移动的速度一定的大于最小速度,这样才做处理,向右的手势处理都差不多,看代码就明白。
关于最小距离,和最小速度,那个东西看自己的需求,这里给一个参考的代码

 private static final int FLING_MIN_DISTANCE = 50;   //最小距离 
  private static final int FLING_MIN_VELOCITY = 0;  .//最小速度

接下来应该将本activity的onTouch事件交给mGestureDetector来处理,
首先让自己的activity实现OnTouchListener接口,代码如下

public class HuadongTestActivity extends Activity implements OnTouchListener
//下面是实现OnTouch方法 并将处理touch时间交给mGestureDetector
@Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        return mGestureDetector.onTouchEvent(event);
    }

如果就这样的话始终完不成既定目标,还做在onCreate(Bundle savedInstanceState) 方法中做下面的操作

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_huadong_test);
        mGestureDetector = new GestureDetector(this, myGestureListener);
        RelativeLayout mRelativeLayout = (RelativeLayout)findViewById(R.id.id_testRelative);//布局的主容器
        mRelativeLayout.setOnTouchListener(this);//将主容器的监听交给本activity,本activity再交给mGestureDetector
         mRelativeLayout.setLongClickable(true);   //必需设置这为true 否则也监听不到手势 
    }

好,就这样了

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014646004/article/details/50816275
文章标签: android 事件监听
个人分类: 每天总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭