关闭

学习Android onTouch偶然遇到的关于获取点击坐标(getX(),getY())的问题

502人阅读 评论(0) 收藏 举报

刚开始学习Android的时候遇到一个问题,本来按照预期的效果,运行下列代码应该可以检测出手指在手机屏幕上的滑动方向(up,down,left,right)的,但程序运行的实际结果是只能检测到向下(down)和向上(up)两种结果,说明两个方向轴的偏移量都是大于零的(即offsetX和offsetY都大于零),即以下两句没有赋值成功。
startX=event.getX();
startY=event.getY();
但通过Log打印的结果显示,startX和startY的值都是非零的,即获取到了点击点(action_down)处的坐标值。所以一直很困惑,既然打印出的startX和startY都没有问题,那为什么判断的时候就出现了问题呢?会不会是第一个case语句中的值改变的时候第二个case语句没有引用到,所以第二个case语句中的startX和startY都是初始值0,导致了只能检测到向下和向右滑动?
于是做了一下测试,即在第二个case语句中打印startX和startY的值,显示结果都为0.0,所以证明此处引用的却确实是变量的初始值。
这里只要把相关变量声明在onTouchEvent()函数的外部就可以达到正确的结果了。估计是Java基础没学好,所以在这里浪费了不少时间,但
也有不少收获,最重要的是学到了如何发现问题,然后一步步的去排查可能导致问题的原因,然后才能顺利的解决问题。

public boolean onTouchEvent(MotionEvent event) {
float startX = 0,startY = 0;
float offsetX,offsetY;
switch (event.getAction()){

    case MotionEvent.ACTION_DOWN:
        startX=event.getX();
        startY=event.getY();
        Log.d("MainActivity",""+startX+""+startY);
        break;
    case MotionEvent.ACTION_UP:
        offsetX=event.getX()-startX;
        offsetY=event.getY()-startY;
        if(Math.abs(offsetX)>Math.abs(offsetY)){
            if(offsetX>15){
                goRight();
                }
            else if(offsetX<-15) {
                goLeft();
            }
        }
        else {
            if(offsetY>15) {
                goDown();
            }
            else if(offsetY<-15){
                goUp();
            }
        }
        break;
}
return true;

}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

onTouchEvent(一) 你所必须知道的坐标详解

OnTouchEvent(MotionEvent event) 这个方法是定制手势操作的重点,根据业务不同写法也各不相同,然而最重要也是最基础的是其坐标的含义,因为不管什么业务都是需要根据其坐标来进行...
  • Suma_sun
  • Suma_sun
  • 2016-10-24 09:15
  • 1911

Android中获取控件的位置宽高等信息都为0

最近在开发Launcher,界面上有一个功能是播放电视节目,也就是一个小的播放窗口。使用SurfaceView来实现的。具体的实现过程就不细说了。在设置显示界面的时候,一开始时自己根据调试写了显示的坐...
  • hanhan1016
  • hanhan1016
  • 2016-04-12 14:57
  • 1734

android(仿QQ向右滑动退出)在viewpager中onTouchEvent无法监听到ACTION_DOWN的getX的值

最近笔者在做项目的时候遇到一个问题,implements OnTouchListener中重写onTouch事件无法获取ACTION_DOWN中getX的值。     笔者想实现的效果:一个A页面...
  • qq_28690547
  • qq_28690547
  • 2015-11-15 18:57
  • 2071

android getX()、getY()、getRawX()、getRawY()、getSrrollX()、getScrollY()、scrollTo()、scrollBy()对比

文章转自,供以后的学习参考。 http://www.bkjia.com/Androidjc/1016399.html 1.getRawX、getRawY与getX、getY的区别 在编写andr...
  • u010696065
  • u010696065
  • 2016-02-16 11:58
  • 276

Android自定义控件:MotionEvent中getX(),getY(),getRawX(),getRawY() ,getTop,getLeft区别

一、getRawX、getRawY与getX、getY的区别 在编写android的自定义控件,或者判断用户手势操作时,往往需要使用MotionEvent中的getRawX()、getRawY()与...
  • xmc281141947
  • xmc281141947
  • 2017-06-08 11:24
  • 352

android onClick和OnTouch引起的有时GridView点击不响应的问题

 描述: touch滑动事件:翻阅图片 click点击事件:toast出图片名 现在的情况是: 1.滑动的时候不仅翻阅了图片,还toast出了图片名(同时相应了tou...
  • kaiqiangzhang001
  • kaiqiangzhang001
  • 2014-04-03 20:25
  • 4288

getx,gety,getwidth,getheight获取控件大小,高度为0

很经常当我们动态创建某些View时,需要通过获取他们的width和height来确定别的view的布局,但是在onCreate()获取view的width和height会得到0.view.getWid...
  • u014702999
  • u014702999
  • 2016-02-23 11:41
  • 688

【Android】View移动时RawX()为什么要重新设置初始坐标/getX()和getRawX()的区别

今天在做拖动View使其跟随手指移动的Demo时,用了getX()和getRawX()两种方法来实现, getX()的方法实现: public boolean onTouchEvent(Motio...
  • QPC908694753
  • QPC908694753
  • 2018-01-10 21:56
  • 40

安卓中的坐标系,getTop();event.getX();event.getY();event.getRawX(); event.getRawY()

一.屏幕坐标系和数学坐标系的区别由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:(PS:其中...
  • iamdingruihaha
  • iamdingruihaha
  • 2017-03-02 10:57
  • 405

Android MotionEvent中getX()和getRawX()区别以及View坐标getLeft(),getTop()一点理解

最近在看一位大神写的可以拖拽移动的GridView的实现,里面有很多通过getX(),
  • diaomao357
  • diaomao357
  • 2014-06-19 00:15
  • 4268
    个人资料
    • 访问:500次
    • 积分:16
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档