Платформа действительно ограничена, хотя это не то, что вы могли бы подумать. Проблема заключается в том, что в pre-API11 RotateDrawable
был какой-то грубый код, требующий поворота анимации по часовой стрелке, проверяя, было ли toDegrees
больше fromDegrees
; если нет, то оба были вынуждены сравняться друг с другом. Если вы изменили свой пример, чтобы второй элемент двигался в прямом направлении (от 0 до 720 или даже от -720 до 0), оба изображения будут хорошо анимироваться на всех платформах; хотя я понимаю, что это побеждает цель, к которой ты стремишься.
Взгляните на кэшированную версию Google Codesearch с RotateDrawable.inflate()
, которая является версией 2.3 метода, используемого для превращения XML в объект, и вы поймете, что я имею в виду.
RotateDrawable.java ... код ошибки в строке 235 ...
float fromDegrees = a.getFloat(
com.android.internal.R.styleable.RotateDrawable_fromDegrees, 0.0f);
float toDegrees = a.getFloat(
com.android.internal.R.styleable.RotateDrawable_toDegrees, 360.0f);
toDegrees = Math.max(fromDegrees, toDegrees); //<--There's the culprit
Это берет блок XML, подобный второму имеющемуся у вас элементу, и превращает его в RotateDrawable
, заканчивающийся тем же значением для fromDegrees
и toDegrees
(в вашем случае, 720), вызывая изображение просто стоять на месте. Вы можете проверить это, установив начальное значение на некоторое значение, не кратное 360 (например, 765). Вы увидите, что изображение все еще не анимируется, но поворачивается к начальной координате.
Эта неловкая проверка была удалена в источниках Honeycomb / ICS, поэтому вы можете выполнять вращение в обратном направлении на этих платформах. Кроме того, не похоже, что есть способ установить эти значения из кода Java, так что пользовательский RotateDrawableCompat
может быть в вашем будущем:)
НТН