Работа с сенсорными событиями на 2.3 с использованием ObjectAnimator

поэтому сначала позвольте мне дать вам некоторый контекст того, что я пытаюсь сделать и что я пробовал :) У меня есть до десяти представлений, которые мне нужно постоянно перемещать справа налево. Как только один вид покидает экран, справа появляется другой. Все виды должны быть сенсорными. Я смог добиться этого несколькими способами, но они не были гладкими (некоторые заикались, другие, казалось, прыгали, когда приложение замедлялось). Все эти представления находятся в группе представлений, и я использую их повторно (всего 10 представлений).

Вот способы, которые я пробовал:

  1. Изменение полей представлений (обновляется с помощью обработчика)
  2. Вызов View.layout(l,t,r,b) (обновляется с помощью обработчика)
  3. Получение View.getDrawingCache() и рисование его на SurfaceView (также с помощью обработчика)
  4. Использование ObjectAnimator (nineoldandroids)

Ни один из них не работал очень плавно (виды останавливались на долю секунды и прыгали), но лучше всего использовалась анимация. Сначала я использовал обычный translateAnimation из Android, но, конечно, это не сенсорно. Я попытался получить матрицу анимации (я не знаю, делаю ли я что-то не так), но он не возвращает верхнюю/левую часть представления:

Transformation outTransformation = new Transformation();
      getTransformation(System.currentTimeMillis(), outTransformation);
      Matrix transformationMatrix = outTransformation.getMatrix();
      float[] matrixValues = new float[9];
      transformationMatrix.getValues(matrixValues);
      float transX = matrixValues[2];
      float transY = matrixValues[5];

Итак, теперь мой вопрос.

Лучший результат, который я получил, был с использованием ObjectAnimator.

mAnimation[index] = ObjectAnimator.ofFloat(mViews[index], "translationX", -left);
            mAnimation[index].setDuration(time);
            mAnimation[index].setInterpolator(new LinearInterpolator());
            mAnimation[index].addListener(mAnimatorListener);
            mAnimation[index].start();

У меня были прикосновения с помощью ObjectAnimator, но только с Android 3.0 и выше (не 2.3).

Кто-нибудь знает, почему или как я могу заставить сенсоры работать на Android 2.3? Или есть лучший способ переместить все эти представления? Что я должен помнить или делать при перемещении/анимации большого количества представлений?

Есть ли у вас какие-либо идеи, как я могу улучшить «плавность» (заикания или остановки на доли секунды и прыжки, чтобы догнать) использования любого из других вариантов, упомянутых выше?

Лучше ли использовать ViewGroup? Извините за столько вопросов.

Любые мысли, идеи или комментарии будут очень полезны и очень ценны :) И если у вас есть дополнительные вопросы или вы что-то не понимаете, дайте мне знать.


person user785235    schedule 24.08.2012    source источник


Ответы (1)


Я только что нашел ваш вопрос, потому что столкнулся с той же проблемой. У меня есть макет, полный кнопок, и я использую ObjectAnimator из NineOldAndroids для его перемещения. Если API> = 11, то все работает нормально, и все кнопки можно нажимать в их НОВОЕ положение. Однако, если API ‹ 11, то, хотя макет перемещается, кнопки не нажимаются в их новых позициях, а скорее в их старых. Проверьте также этот ответ.

person Dimitris    schedule 20.06.2013