读书人

android的bug很无语的bug。呜呜呜呜

发布时间: 2012-03-20 14:01:11 作者: rapoo

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下的文档
[解决办法]
多点触控也是智能机的一大优点啊,不会错的吧。
------解决方案--------------------


别一上来就说android的bug,android要是这么多很容易就发现的bug,还玩个P啊
[解决办法]
来学习的,帮顶
[解决办法]
楼主用的不对。

针对多点的情况:

// 这个不对。
x[0]=event.getX(0);
y[0]=event.getY(0);

应该是(函数名我有可能拼错):
int id = event.getPointerId(0);
x[0] = event.getX(id);
y[0] = event.getY(id);

[解决办法]
Mark
以后可能会遇到类似的问题。
[解决办法]
好像确实是这样的,我虽然没写代码测试,但是以前装过一个测试多点触摸的软件,我按两个手指的时候,显示的却是两指形成的矩形的另一个对角线的两点。

读书人网 >Android

热点推荐