android 上下左右手势判断

本文介绍了一个基于Android平台的手势识别应用程序开发过程。该应用通过获取屏幕尺寸并利用GestureDetector监听用户手势来判断用户滑动方向,并根据不同方向触发相应操作。通过示例代码展示了如何实现上、下、左、右四个基本手势的识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
}

  demo

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 GesturetestActivityextends 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();
    }
 
     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值