android 上下左右手势判断
16lz
2021-01-26
GestureUtils.java
package com.gesture;import android.content.Context;import android.util.DisplayMetrics;import android.view.WindowManager;public class GestureUtils { //获取屏幕的大小 public static Screen getScreenPix(Context context) { DisplayMetrics dm = new DisplayMetrics(); WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(dm); return new Screen(dm.widthPixels,dm.heightPixels); } public static class Screen{ public int widthPixels; public int heightPixels; public Screen(){ } public Screen(int widthPixels,int heightPixels){ this.widthPixels=widthPixels; this.heightPixels=heightPixels; } @Override public String toString() { return "("+widthPixels+","+heightPixels+")"; } } }
BuileGestureExt.java
package com.gesture;import com.gesture.GestureUtils.Screen;import android.content.Context;import android.view.GestureDetector;import android.view.MotionEvent;public class BuileGestureExt { public static final int GESTURE_UP=0; public static final int GESTURE_DOWN=1; public static final int GESTURE_LEFT=2; public static final int GESTURE_RIGHT=3; private OnGestureResult onGestureResult; private Context mContext; public BuileGestureExt(Context c,OnGestureResult onGestureResult) { this.mContext=c; this.onGestureResult=onGestureResult; screen = GestureUtils.getScreenPix(c); } public GestureDetector Buile() { return new GestureDetector(mContext, onGestureListener); } private Screen screen; private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { float x = e2.getX() - e1.getX(); float y = e2.getY() - e1.getY(); //限制必须得划过屏幕的1/4才能算划过 float x_limit = screen.widthPixels / 4; float y_limit = screen.heightPixels / 4; float x_abs = Math.abs(x); float y_abs = Math.abs(y); if(x_abs >= y_abs){ //gesture left or right if(x > x_limit || x < -x_limit){ if(x>0){ //right doResult(GESTURE_RIGHT); }else if(x<=0){ //left doResult(GESTURE_LEFT); } } }else{ //gesture down or up if(y > y_limit || y < -y_limit){ if(y>0){ //down doResult(GESTURE_DOWN); }else if(y<=0){ //up doResult(GESTURE_UP); } } } return true; } }; public void doResult(int result) { if(onGestureResult!=null) { onGestureResult.onGestureResult(result); } } public interface OnGestureResult { public void onGestureResult(int direction); }}
调用 .java
package
com.gesture;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.GestureDetector;
import
android.view.MotionEvent;
import
android.widget.Toast;
public
class
GesturetestActivity
extends
Activity {
/** Called when the activity is first created. */
private
GestureDetector gestureDetector;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector =
new
BuileGestureExt(
this
,
new
BuileGestureExt.OnGestureResult() {
@Override
public
void
onGestureResult(
int
direction) {
show(Integer.toString(direction));
}
}
).Buile();
}
@Override
public
boolean
onTouchEvent(MotionEvent event) {
return
gestureDetector.onTouchEvent(event);
}
private
void
show(String value){
Toast.makeText(
this
, value, Toast.LENGTH_SHORT).show();
}
}
更多相关文章
- Android在锁屏状态下启动界面
- ScreenUtil
- 2020.05.11-Python中调用zip包中的Python脚本
- Android调用本地WebService
- Android(安卓)动态横竖屏切换
- [Android]调用系统相册获取图片
- Android与Javascript交互示例(二)
- Android4.4电源管理——电源锁
- 五分钟学会之AsyncTask