我在Android电子市场上有一款名为Speed Anatomy的应用程序。它已经工作并且稳定了好几个月。现在,在Android 3.2推出像素缩放功能之前,我的(基于画布)应用在一些带有大黑边的平板电脑上显得无法缩放。我最终自己实现了像素缩放,因此它不使用新的3.2机制。这是很容易随机调整大小问题Android平板电脑
public void setSurfaceSize(int width, int height) {
synchronized (mSurfaceHolder) {
matrix.reset();
float cancasScaleFactorY=height/(480.0f*scale);
float cancasScaleFactorX=width/(320.0f*scale);
float cancasScaleFactor=Math.min(cancasScaleFactorY, cancasScaleFactorX);
matrix.postScale(cancasScaleFactor,cancasScaleFactor);
...
public void doDraw(Canvas canvas) {
canvas.setMatrix(matrix);
...
boolean doTouchEvent(MotionEvent event) {
float[] xy=new float[2];
xy[0]=event.getX();
xy[1]=event.getY();
matrixI.set(matrix);
matrixI.invert(matrixI);
//revert touch coordinate to the original unscaled coordinate space.
matrixI.mapPoints(xy);
...
这适用于我测试的所有设备,包括大多数平板电脑,在3.0的模拟器,3.1等
上周我收到一封电子邮件从一个用户,他说:索尼S拥有Android 3.2平板电脑,触摸坐标偏离了几厘米。由于我没有实际的平板电脑,我去了当地的Staples商店,他们在那里展示了多款Android平板电脑。我的应用程序加载了Android 3.2的eee Transformer和Android 3.1的Galaxy tab 10.1,他们都完美地运行了我的应用程序。
所以我觉得用户犯了一个错误,并使用了我的应用程序的旧版本(尽管他明确告诉我他有Android Market的我的应用程序的最新版本)。
昨天晚上我在一场音乐会上,加拿大运营商Telus和一些Galaxy Tabs 10.1展出了一个摊位。当我在等待一些朋友,并有一些时间杀死,我加载了我的应用程序来做最后一个测试。
令我惊讶的是,触摸检测全部关闭!基本上它的作用就像在doDraw()上完成缩放,也就是应用程序是全屏和像素缩放的(除了用我的方法在高分辨率下渲染的文本),但触摸坐标没有缩放,也就是说,我必须触摸左上方320x480角落的屏幕,否则触摸将在屏幕外注册。
所以我有两个银河标签10.1与Android 3.1上,触及一个正确的规模,但没有其他。我也有一个用户在索尼S上用Android 3.2声称有问题,并且我在3.2的变压器上正常工作。对那些无法正常工作的矩阵操作似乎存在问题。要么是间歇性问题,要么还有其他一些我没有想到的因素。哦,我刚才想到的事实是,第二台GT10.1可能是3g,因为它在大街上,而其他的是WiFi,(我不知道用户的),但我看不到这个影响矩阵变换,对吗?
在此之前,我从来没有遇到Android Fragmentation的问题,实际上它比处理不同的iOS版本更容易。
任何线索可能会导致这种情况以及我如何解决问题?
如果你想try it有一个免费版本的应用程序。让我知道它是否适用于您的设备。
编辑:我只是想到别的东西。 Android电子市场有可能偶尔为我的应用程序的旧版本提供服务吗?我不确定,但我认为这个错误可能存在于市场上短暂的版本中。然而,它已经在一个多月前被修复和更新。
我想我应该用mapPoints的单参数版本已。我不知道为什么我使用这两个参数版本。代码可能是从使用两个点的数组发展而来的,并且我没有想到切换到单个参数版本。我没有测试过单个参数版本,所以我不能确认它是否解决了这个问题。 –