android 上下左右手势判断

来源:互联网 发布:淘宝口红哪家是正品 编辑:程序博客网 时间:2024/05/17 08:24
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+")";        }            }    }


手势判别的核心方法:

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

手势使用的示例:

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.view.GestureDetectorandroid.view.GestureDetector.SimpleOnGestureListenerpublic class AutoFile extends Activity implements OnTouchListener{  private GestureDetector gd1;  private MyGesture mg1;  private ViewFlipper vf1 =null;  mg1 = new MyGesture();  gd1 = new GestureDetector(AutoFile.this,mg1);  tv2.setOnTouchListener(this);  tv2.setLongClickable(true);  public class MyGesture implements GestureDetector.OnGestureListener  {  @Override  public boolean onDown(MotionEvent arg0) {  //下滑时触发  // TODO Auto-generated method stub  bt6.setText("onDown");  return false;  }  @Override  public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,  //上滑时触发  float arg3) {  // TODO Auto-generated method stub  bt6.setText("onFling");  return true;  }  @Override  public void onLongPress(MotionEvent arg0) {      //长时间按住时触发  // TODO Auto-generated method stub  }  @Override  public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,   //滑动时触发  float arg3) {  // TODO Auto-generated method stub  bt6.setText("onScroll");  return false;  }  @Override  public void onShowPress(MotionEvent arg0) {  // TODO Auto-generated method stub  }  @Override  public boolean onSingleTapUp(MotionEvent arg0) {  // TODO Auto-generated method stub  return false;  }  }//myges class  @Override  public boolean onTouch(View arg0, MotionEvent arg1) {  // TODO Auto-generated method stub  return gd1.onTouchEvent(arg1);  //return true;  }


0 0
原创粉丝点击