android 上下左右手势判断
2014-03-30 22:55
519 查看
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.GestureDetector android.view.GestureDetector.SimpleOnGestureListener public 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; }
相关文章推荐
- android 上下左右手势判断
- android 上下左右手势判断 根据别人的改的
- android左右上下手势判断
- android 上下左右手势判断
- android 判断左右滑动,上下滑动的GestureDetector简单手势检测
- android 上下左右手势判断 根据别人的改的
- android 上下左右手势判断 根据别人的改的
- android 上下左右手势判断 根据别人的改的
- android 简单的 左右上下手势 判断
- android 上下左右手势判断 根据别人的改的
- android 上下左右手势判断 根据别人的改的
- android GestureDetector简单手势检测(左右滑动、上下滑动)
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
- Android OnGestureListener 判断手势上下滑动
- Android OnGestureListener用法 识别用户手势 上下左右滑动
- jquery 判断手势滑动方向(上下左右)
- Android 用onTouchEvent判断上下左右滑动
- Android上下左右手势滑动事件处理
- symbian 基本触摸动作的使用(判断上下,左右等手势)
- iphone上下左右手势判断代码