当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 安卓中区分点击事件和滑动事件

安卓中区分点击事件和滑动事件 时间:2014-08-20      来源:未知

为了实时的感应用户对屏幕的手指操作,安卓系统提供了onTouchEvent()方法来捕获用户操作的事件,其经常使用的有三类: ACTION_DOWN, ACTION_UP, ACTION_MOVE。

现在想要实现的效果是:当手机按住屏幕时,如果在指定的时间内没有移动,那么识别为点击图标。如果手指按住屏幕就立马移动,那么就识别为拖动图标。

一般情况下,我们想实现什么样的方法,只需要在对应的类下边编写算法即可。大概思路如下:在按下时记录x,y坐标以及按下时间,当第一次移动的时候获取移动的时间,如果大于指定的长按时间,那么识别为点击,否则就是节点拖动。很容易,在模拟器里面实现了这个效果,但是当在真机里面运行时,却无法实现这样的效果。原因是模拟器点击的时候能够保证在不移动鼠标的情况下不触发ACTION_MOVE,但是真机却很敏感,几乎在ACTION_DOWN后的几毫秒之后就立马不停的ACTION_MOVE了。所以,单单从手指按下的时间长短上区分点击事件和滑动时间并不是很理想,所以,在这里将要介绍另一种方法:通过按下后手指的位移大小来区分事件。

MotionEvent 类提供了记录当前坐标的函数(getX(),getY())和当前事件产生的时间的函数(getEventTime())以及按下时间 (getDowntime())。MotionEvent同时也提供了当前的操作类型,按下(ACTION_DOWN)、 移动 (ACTION_MOVE)、弹起 (ACTION_UP)。有了这些参数,我们便可以轻易的实现想要的效果了。

当一开始点击的时候,记录下当前的位置坐标

public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                float x = 0;
                float y = 0;
                button = false; 

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        x = event.getX();
                        y = event.getY();
                        for (moveNodeNum = 0; moveNodeNum < NUM; moveNodeNum++) {
                                if ((x < zNode[moveNodeNum].posX + TOUCHRADIUS)
                                && (x > zNode[moveNodeNum].posX - TOUCHRADIUS)
                                && (y < zNode[moveNodeNum].posY + TOUCHRADIUS)
                                && (y > zNode[moveNodeNum].posY - TOUCHRADIUS)) {
                                        tx = zNode[moveNodeNum].posX;
                                        ty = zNode[moveNodeNum].posY;

当手指产生位移时候,判断位移的大小

else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                x = event.getX();
                y = event.getY();

                if ((moveNodeNum >= 0) && (moveNodeNum < NUM)) {
                        if (moveNodeKind == 1) {
                                if ((Math.abs(x - tx) > 30) || (Math.abs(y - ty) > 30)) {
                                        button = false;

如果小于30像素的时候,认为手指只是有轻微的移动,即识别为点击,不识别为拖动,更改button 来实现效果的判断。

if (button == true) {//为真时为点击效果,为假时识别为拖动

只要在对应button的不同位置实现相应的代码即可。

上一篇:Android ril移植-6410开发板SIM300模块

下一篇:Java中的throws与throw关键字

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部