У меня есть приложение в Android Market под названием Speed Anatomy.Он работал и стабильно в течение нескольких месяцев.Теперь, до выхода Android 3.2 с функцией масштабирования пикселей, мое приложение (на основе холста) казалось немасштабированным на некоторых планшетах с большой черной рамкой.В итоге я сам применил пиксельное масштабирование, поэтому он не использует новый механизм 3.2.Это было довольно просто
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 и т. Д.
На прошлой неделе я получил электронное письмо отПользователь сказал, что у него Sony S с планшетом на Android 3.2, а сенсорные координаты были на несколько сантиметров.Поскольку у меня нет реального планшета, я пошел в свой местный магазин Staples, где у них есть несколько планшетов Android на дисплее.Загрузил мое приложение на eee Transformer с Android 3.2 и Galaxy Tab 10.1 с Android 3.1, и они оба без проблем запустили мое приложение.
Поэтому я решил, что пользователь допустил ошибку и использовал старую версию моего приложения (хотя он специально сказал мне, что у него последняя версия моего приложения из Android Market).
Вчера вечером я был на концерте, и там был стенд от канадского оператора Telus с некоторыми Galaxy Tabs 10.1.Поскольку я ждал нескольких друзей и имел некоторое время, чтобы убить, я загрузил на него свои приложения, чтобы провести последний тест.
К моему удивлению, обнаружение касания было полностью отключено!По сути, он действовал так, как если бы масштабирование было выполнено в doDraw (), то есть приложение было полноэкранным и с пиксельным масштабированием (за исключением текста, который отображается в высоком разрешении с помощью моего метода), но координаты касания не были масштабированы, то естьпришлось касаться экрана в верхнем левом углу 320x480, иначе касания регистрировались бы за пределами экрана.
Таким образом, у меня есть две вкладки Galaxy 10.1 с Android 3.1 на ней, касания масштабируются правильно на одной, но не на другой.У меня также есть пользователь, который заявляет о проблемах на Sony S с Android 3.2, и он правильно работает на трансформаторе с 3.2.Кажется, есть проблема с матричными операциями на тех, которые работают неправильно.Либо это временная проблема, либо есть какой-то другой фактор, о котором я не задумывался.О, я просто подумал о том, что вполне вероятно, что второй GT10.1 был 3g, так как он был снаружи на улице, в то время как другие были Wi-Fi, (я не знаю о пользователе), но я не вижу этоговлияет на матричные преобразования, верно?
У меня никогда не было проблем с Android Fragmentation до этого, на самом деле это было проще, чем иметь дело с различными версиями iOS.
Любая подсказка, что может быть причиной, и как я могу исправитьпроблема?
Существует бесплатная версия приложения, если вы хотите попробовать .Дайте мне знать, если это работает на вашем устройстве.
РЕДАКТИРОВАТЬ: Я просто подумал о чем-то еще.Возможно ли, что Android Market время от времени случайно показывает старую версию моего приложения?Я не уверен, но я думаю, что эта ошибка могла существовать в версии, которая была кратко на рынке.Однако это было исправлено и обновлено более месяца назад.