Android的侧滑事件可以帮助我们更好地实现单手操作,特别是对于一些超过5.0的屏来说,通过侧滑可以为我们带来很好的体验,要做的侧滑,在这里,自己写了一个类,以后可以通过调用这个类来方便实现对于侧滑事件的监听。
package com.example.dialogdemo;
import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class GestureListener extends SimpleOnGestureListener implements
OnTouchListener {
/** 左右滑动的最短距离 */
private int distance = 100;
/** 左右滑动的最大速度 */
private int velocity = 200;
//声明手势识别类
private GestureDetector gestureDetector;
public GestureListener(Context context) {
super();
gestureDetector = new GestureDetector(context, this);
// TODO Auto-generated constructor stub
}
/**
* 向左滑的时候调用的方法,子类应该重写
* @return
*/
public boolean left() {
return false;
}
/**
* 向右滑的时候调用的方法,子类应该重写
* @return
*/
public boolean right() {
return false;
}
//移动的监听
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
// e1:第1个ACTION_DOWN MotionEvent,即手指所触及的位置的坐标
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度(像素/秒)
// velocityY:Y轴上的移动速度(像素/秒)
// 向左滑
if (e1.getX() - e2.getX() > distance
&& Math.abs(velocityX) > velocity) {
left();
}
// 向右滑
if (e2.getX() - e1.getX() > distance
&& Math.abs(velocityX) > velocity) {
right();
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
gestureDetector.onTouchEvent(event);
return false;
}
public int getDistance() {
return distance;
}
public void setDistance(int distance) {
this.distance = distance;
}
//获得速度,
public int getVelocity() {
return velocity;
}
//设定速度
public void setVelocity(int velocity) {
this.velocity = velocity;
}
public GestureDetector getGestureDetector() {
return gestureDetector;
}
public void setGestureDetector(GestureDetector gestureDetector) {
this.gestureDetector = gestureDetector;
}
}
接下来就是在activity中调用该监听来监听屏幕中的触摸和移动事件
首先我们要获得监听器所要执行的view对象
RelativeLayout relative = (RelativeLayout) findViewById(R.id.view1);
relative.setLongClickable(true);
relative.setOnTouchListener(new MyGestureListener(this));
为给布局view设置上触摸事件的监听者,然后在本地继承之前写好的类,来实现对于侧滑事件的监听
<pre name="code" class="java">private class MyGestureListener extends GestureListener {
public MyGestureListener(Context context) {
super(context);
}
@Override
public boolean left() {
TextView text = (TextView)findViewById(R.id.text);
text.setText("向左滑动");
return super.left();
}
@Override
public boolean right() {
TextView text = (TextView)findViewById(R.id.text);
text.setText("向右滑动");
return super.right();
}
}