浏览 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! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2010-01-18
引用 请教下:传闻2.1开始支持多点触摸了,有相关文档或者实现代码吗?
2.1确实可以支持多点触摸,但是实现了该功能的手机少。 就拿Google最新的Nexus One来说,欧版的就支持,其他版本就不支持了。 |
|
返回顶楼 | |
发表时间:2010-12-07
像scroller等控件 怎么在其上层获得Motion Event 而又不影响Scroller的功能。
|
|
返回顶楼 | |