当前位置: 代码迷 >> Android >> android的bug,很无语的bug。呜呜呜呜。该如何解决
  详细解决方案

android的bug,很无语的bug。呜呜呜呜。该如何解决

热度:53   发布时间:2016-05-01 21:52:19.0
android的bug,很无语的bug。。。呜呜呜呜。。。。
是这样的,我正在研究一个android的多点触屏问题。我知道android在2.0版本以上的sdk中已经提供了对多点触屏的处理函数,这个函数是这样的:

event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕
event.getX(nID); //获取第nID个触控点的x位置
event.getY(nID); //获取第nID个点触控的y位置

函数很好,我发现的bug在于:

当二指触屏时,特别是二指移动引发mov事件时,Event.getX和event.getY取得的x,y坐标会出错。

如二指触屏的坐标为(x1,y1)和(x2,y2),实际上坐标值为(50,400)和(280,80)。而用event.getX(0),event.getY(0),event.getX(1),event.getY(1)函数获得的坐标却为(50,80)和(280,400)或者(50,200)和(280,200)。

也就是多点触屏的函数获得的x,y坐标的值不准确,这是android的大bug。

大家遇到过这种问题吗?

------解决方案--------------------
木有研究过啊
------解决方案--------------------
帮顶下,表要下沉了
------解决方案--------------------
给WebView弄了一个多点触控缩放的方法,从网上找的,挺好的呀
------解决方案--------------------
Java code
@Override     public boolean onTouch(View v, MotionEvent event) {         int action = event.getAction() & MotionEvent.ACTION_MASK;         int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;         int pointerId = event.getPointerId(pointerIndex);          switch (action) {         case MotionEvent.ACTION_DOWN:         case MotionEvent.ACTION_POINTER_DOWN:             touched[pointerId] = true;             x[pointerId] = (int)event.getX(pointerIndex);             y[pointerId] = (int)event.getY(pointerIndex);             break;          case MotionEvent.ACTION_UP:                   case MotionEvent.ACTION_POINTER_UP:         case MotionEvent.ACTION_CANCEL:             touched[pointerId] = false;              x[pointerId] = (int)event.getX(pointerIndex);             y[pointerId] = (int)event.getY(pointerIndex);             break;         case MotionEvent.ACTION_MOVE:             int pointerCount = event.getPointerCount();             for (int i = 0; i < pointerCount; i++) {                 pointerIndex = i;                 pointerId = event.getPointerId(pointerIndex);                 x[pointerId] = (int)event.getX(pointerIndex);                 y[pointerId] = (int)event.getY(pointerIndex);             }             break;         }                  updateTextView();                return true;     }
------解决方案--------------------
这绝对不是bug是楼主木有用好。我目前木有做过这个,但是很多应用都有这功能,貌似木有bug。你不能直接这样获取坐标,当然需要做一些判定哦。
------解决方案--------------------
没有发现,LZ贴下具体代码,具体分析下是怎么造成的
------解决方案--------------------
可以看看我的博客,我专门写了两点触摸和多点触控的,http://blog.sina.com.cn/s/blog_8d955f8c0100y2xv.html
------解决方案--------------------
虽然没研究过这个。。不过最好不要认为google错了。。而且还错了那么久没改。。所以应该是你错了。。。
------解决方案--------------------
哈哈,我刚工作时候好像也像楼主一样经常会发现很多前人未发现的系统bug.
结果:100%都是我自己犯的低级错误......
------解决方案--------------------
:-),不懂帮顶
------解决方案--------------------
我也顶下 别沉了
------解决方案--------------------
没做过帮顶
------解决方案--------------------
:-),不懂帮顶
------解决方案--------------------
看看LINUX下的文档
------解决方案--------------------
多点触控也是智能机的一大优点啊,不会错的吧。
------解决方案--------------------
  相关解决方案