您的位置:首页 > 其它

GestureDetector 简单使用

2016-04-30 22:23 393 查看
GestureDetector是对传入的MotionEvent进行再判断的类。GestureDetector为我们提供了两个接口OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener。

我们可以通过两种方法使用GestureDetector

1、声明OnGestureListener接口,或者OnDoubleTapListener接口,之后实例化GestureDetector对象,在OnTouchEvent()中调用gestureDetector.onTouchEvent(event)方法。通过回调来判断触碰的动作。

public class AdapterViewFlipperActivity extends Activity implements GestureDetector.OnGestureListener{
GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adapterviewflipper);
gestureDetector = new GestureDetector(this);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
// 触发条件 :
// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > 100
&& Math.abs(velocityX) > 200) {

// Fling left
Log.i("left","left");
Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
} else
if (e2.getX() - e1.getX() > 100
&& Math.abs(velocityX) > 200) {

// Fling right
Log.i("right","right");
Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
}
return false;
}
}


2、声明一个SimpleOnGestureListener类,复写其中的方法。再将其传入实例化的GestureDetector对象中,之后同1做法。

public class AdapterViewFlipperActivity extends Activity {
GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adapterviewflipper);
gestureDetector = new GestureDetector(this,simpleOnGestureListener);
}

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

// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
// 触发条件 :
// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > 100
&& Math.abs(velocityX) > 200) {

// Fling left
Log.i("left","left");
Toast.makeText(AdapterViewFlipperActivity.this, "Fling Left", Toast.LENGTH_SHORT).show();
} else
if (e2.getX() - e1.getX() > 100
&& Math.abs(velocityX) > 200) {

// Fling right
Log.i("right","right");
Toast.makeText(AdapterViewFlipperActivity.this, "Fling Right", Toast.LENGTH_SHORT).show();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
};

@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: