手势识别器GestureDetector的实际使用:
1.自定义一个类,继承Activity,重写onCreate方法;
2.在onCreate方法中,直接 new 一个GeatureDetector,使用两个参数的那个 ,参1:上下文;参2:监听者
3.在onCreate方法中重写onTouchEvent方法,因为手势识别器识别的手势要在onTouchEvent方法中被执行
##参数2 直接new onGestureListener ,这样就要实现其全部的为实现的方法
实例代码():
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
public class BaseActivity extends Activity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
detector = new GestureDetector(getApplicationContext(), new OnGestureListener() {
//抬起
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
//按下显示
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
//界面随着手指拖动
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
//长按
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
//滑动,手指松开的时候执行
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
//按下
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
});
}
//屏幕的触摸事件,手势接收器接收到的手势要在onTouchEvent方法下运行
@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
##实际使用中,如果要识别的手势不多,可以把参数2 写成onGestureDetector的实现子类,onSimpleGestureDetector
实例代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
public class BaseActivity extends Activity {
private GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
detector = new GestureDetector(getApplicationContext(), new SimpleOnGestureListener(){
//只使用到滑动手势,手指滑动一段距离,松开是执行此动作
//e1 表示手指的起点 ; e2 表示手指的终点
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
//屏幕的触摸事件,手势接收器接收到的手势要在onTouchEvent方法下运行
@Override
public boolean onTouchEvent(MotionEvent event) {
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
判断左划右划:
float
startX = e1.getRawX();//按下时的坐标
float endX = e2.getRawX();//抬起时的坐标
if(endX-startX > 100){//表示手指向右→移动的距离大于100dp
prePager();
}
if(startX-endX > 100){//表示手指向←左移动的距离大于100dp
nextPager();
}
两个抽象方法:
protected abstract void toPrePager();protected abstract void toNextPager();//下一页的方法protected void nextPager() {toNextPager();}//上一页的方法protected void prePager() {toPrePager();}