刚刚在这里找到了答案!
https://stackoverflow.com/a/8697806/327402 https://stackoverflow.com/a/8697806/327402
非常有用的帖子!
确实存在平台限制,尽管它不是您想象的那样。问题是 API11 之前,RotateDrawable
其中有一些粗略的代码,要求动画通过检查是否顺时针旋转toDegrees
大于fromDegrees
;如果不是,则两者被迫平等。如果您修改示例以使第二个项目向前移动(从 0 到 720,甚至 -720 到 0),则两个图像在所有平台上都可以正常显示动画;尽管我意识到这违背了你的目标。
看看 Google Codesearch 的缓存版本RotateDrawable.inflate()
,这是用于将 XML 转换为对象的方法的 2.3 版本,您就会明白我的意思。
旋转绘图.java http://codesearch.google.com/codesearch#uX1GffpyOZk/graphics/java/android/graphics/drawable/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
and toDegrees
(在你的例子中,720),导致图像只是静止不动。您可以通过将起始值设置为某个值而不是 360 的倍数(例如 765)来进行可见测试。您会看到图像仍然没有动画,但旋转到初始坐标。
Honeycomb/ICS 源中删除了这个尴尬的检查,这就是为什么您可以在这些平台上进行向后旋转。另外,看起来没有办法从 Java 代码中设置这些值,因此自定义RotateDrawableCompat
可能在你的未来:)
HTH