论坛首页 移动开发技术论坛

手势识别

浏览 9332 次
锁定老帖子 主题:手势识别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-13   最后修改:2010-01-13
手势识别

[功能]
何为手势识别? 比如:你在屏幕上从左至右划出的一个动作 这就是手势 能够识别这个的就是 手势识别

[思路]
1. android 有一个手势识别的类:OnGestureListener
2. 在 GestureDetector() 中使用上面的class 即可 系统就会把手势交由该类来处理


[代码]
1. 该类的定义
public class SampleGuest implements OnGestureListener {
		Activity activity;
		
		public SampleGuest(Activity a){
			activity = a;
		}
	
	    // called automatically, any screen action will Triggered it
	    public boolean onTouchEvent(MotionEvent me){
	    	return gesture.onTouchEvent(me);
	    }

		@Override
		public boolean onDown(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("TAG","[+++++++++++][onDown]");
			return true;
		}

		@Override
		//e1, the begin of ACTION_DOWN MotionEvent
		//e2, the end of ACTION_DOWN MotionEvent
		// velocityX, the motion speed in X
		// velocityY:the motion speed in y
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			// TODO Auto-generated method stub
			if ((e1.getX() - e2.getX() > VALUE_DISTANCE)
	    			&& Math.abs(velocityX) > VALUE_SPEED) {
	    		Log.d("TAG","[+++++++++++][onFling][Fling left]");
	    	} else if ((e2.getX() - e1.getX() > VALUE_DISTANCE)
	    			&& Math.abs(velocityX) > VALUE_SPEED) {
	    		Log.d("TAG","[+++++++++++][onDown][Fling right]");

	    	}
			return true;
		}

		@Override
		public void onLongPress(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("TAG","[+++++++++++][onLongPress]");
		}

		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
				float distanceY) {
			// TODO Auto-generated method stub
			Log.d("TAG","[+++++++++++][onScroll]");
			return true;
		}

		@Override
		public void onShowPress(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("TAG","[+++++++++++][onShowPress]");
		}

		@Override
		public boolean onSingleTapUp(MotionEvent e) {
			// TODO Auto-generated method stub
			Log.d("TAG","[+++++++++++][onSingleTapUp]");
			return true;
		}
		
	}

(大家可以自己做一些手势 然后看 LogCat 就会知道是什么手势了)


2. 如何使用
SampleGuest sg = new SampleGuest(this);
GestureDetector gesture = new GestureDetector(sg);



over!


   发表时间:2010-01-18  
请教下:传闻2.1开始支持多点触摸了,有相关文档或者实现代码吗?

PS:帮助补充些注解
// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
public boolean onDown(MotionEvent e){}

// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 
//多个ACTION_MOVE, 1个ACTION_UP触发
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
// 触发条件 :
// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY){}

// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
public void onLongPress(MotionEvent e)

// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY)

// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
public void onShowPress(MotionEvent e)

// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
public boolean onSingleTapUp(MotionEvent e)
0 请登录后投票
   发表时间:2010-01-18  
引用
请教下:传闻2.1开始支持多点触摸了,有相关文档或者实现代码吗?


2.1确实可以支持多点触摸,但是实现了该功能的手机少。

就拿Google最新的Nexus One来说,欧版的就支持,其他版本就不支持了。

0 请登录后投票
   发表时间:2010-12-07  
像scroller等控件 怎么在其上层获得Motion Event 而又不影响Scroller的功能。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics