今天在做一个项目时用到了简单的手势功能(向左,向右滑切屏),于是简单地封装了下

import android.content.Context;

import android.util.DisplayMetrics;

import android.view.GestureDetector;

import android.view.GestureDetector.OnGestureListener;

import android.view.MotionEvent;

public class GestureHelper implements OnGestureListener {

private GestureDetector gesture_detector;

private int screen_width;

private OnFlingListener listener_onfling;

public static abstract class OnFlingListener {

public abstract void OnFlingLeft();

public abstract void OnFlingRight();

}

public GestureHelper(Context context) {

DisplayMetrics dm = context.getResources().getDisplayMetrics();

screen_width = dm.widthPixels;

gesture_detector = new GestureDetector(context, this);

}

public void setOnFlingListener(OnFlingListener listener) {

listener_onfling = listener;

}

public boolean onTouchEvent(MotionEvent event) {

return gesture_detector.onTouchEvent(event);

}

@Override

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

// 触发条件 :

// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

final int FLING_MIN_DISTANCE = (int) (screen_width / 3.0f), FLING_MIN_VELOCITY = 200;

if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

listener_onfling.OnFlingLeft();

} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

listener_onfling.OnFlingRight();

}

return true;

}

@Override

public boolean onDown(MotionEvent e) {

return false;

}

@Override

public void onLongPress(MotionEvent e) {

}

@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

float distanceY) {

return false;

}

@Override

public void onShowPress(MotionEvent e) {

}

@Override

public boolean onSingleTapUp(MotionEvent e) {

return false;

}

}

使用方法如下:

public class TestActivity extends Activity {

private GestureHelper gh;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_start);

gh = new GestureHelper(this);

gh.setOnFlingListener(new OnFlingListener() {

@Override

public void OnFlingLeft() {

//向左滑动

}

@Override

public void OnFlingRight() {

//向右滑动

}

});

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return gh.onTouchEvent(event);

}

}

诸如向上向下滑等因为需求不多所以没有加上去,有需求的朋友可以自己加上。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐