WEB开发网
开发学院手机开发Android 开发 简述 Android 触摸屏手势识别 阅读

简述 Android 触摸屏手势识别

 2010-04-20 06:02:00 来源:WEB开发网   
核心提示:01.@Override02.public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,03. float velocityY) {04. // 参数解释:05. // e1:第1个ACTION_DOWN MotionEvent06.

01.@Override

02.public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

03. float velocityY) {

04. // 参数解释:

05. // e1:第1个ACTION_DOWN MotionEvent

06. // e2:最后一个ACTION_MOVE MotionEvent

07. // velocityX:X轴上的移动速度,像素/秒

08. // velocityY:Y轴上的移动速度,像素/秒

09.

10. // 触发条件 :

11. // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

12.

13. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE

14. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

15. // Fling left

16. Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();

17. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE

18. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

19. // Fling right

20. Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();

21. }

22.

23. return false;

24.}

问题是,这个时候如果我们尝试去运行程序,你会发现我们根本得不到想要的结果,跟踪代码的执行的会发现onFling()事件一直就没有被捕捉到。这正是一开始困扰我的问题,这到底是为什么呢?

我在讨论组的Gesture detection这个帖子里找到了答案,即我们需要在onCreate中tv.setOnTouchListener(this);之后添加如下一句代码。

1.tv.setLongClickable(true);

只有这样,view才能够处理不同于Tap(轻触)的hold(即ACTION_MOVE,或者多个ACTION_DOWN),我们同样可以通过layout定义中的android:longClickable来做到这一点。

这次遇到的这个问题和上次MapView中setOnKeyListener遇到的问题挺类似,其实都是对SDK的了解不够全面,遇到了一次记住了就好。不过话说回来,Google在文档方面确实需要加强了,起码可以在OnGestureListener中说明需要满足那些条件才可以保证手势被正确识别。

上一页  1 2 3 4 

Tags:简述 Android 触摸屏

编辑录入:coldstar [复制链接] [打 印]
赞助商链接