android - 为蜂窝前的两层可绘制项目设置动画

标签 android android-animation android-xml

我正在尝试为可绘制对象的两层设置动画,以实现蜂窝后不确定进度指示器的效果。 XML 非常简单,但在 Honeycomb 之前的平台上运行时,似乎只有一层会设置动画。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
             android:drawable="@drawable/abs__spinner_48_outer_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="0"
             android:toDegrees="1080" />
    </item>
    <item>
        <rotate
             android:drawable="@drawable/abs__spinner_48_inner_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="720"
             android:toDegrees="0" />
    </item>
</layer-list>

这仅仅是这些平台的限制,还是有我可以使用的替代语法(一般或专门针对 API11 之前的语法)来实现所需的功能?

最佳答案

确实存在平台限制,尽管这可能不是您所想的那样。问题是 API11 之前的 RotateDrawable 中有一些粗略的代码,通过检查 toDegrees 是否大于 fromDegrees 来要求动画顺时针旋转>;如果不是,则两者被迫彼此相等。如果您修改您的示例,让第二个项目向前移动(从 0 到 720,或者甚至从 -720 到 0),那么两个图像在所有平台上都可以很好地动画;尽管我意识到这违背了您的目标。

看一下 Google Codesearch 的 RotateDrawable.inflate() 缓存版本,这是用于将 XML 转换为对象的方法的 2.3 版本,您会看到什么我是说。

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 block ,就像您那里的第二个项目一样,并将其转换为 RotateDrawable,最终 fromDegrees 的值相同toDegrees(在您的情况下为 720),导致图像静止不动。您可以通过将起始值设置为某个不是 360 的倍数(如 765)的值来进行可见测试。您会看到图像仍然没有动画,而是旋转到初始坐标。

在 Honeycomb/ICS 源代码中删除了这个笨拙的检查,这就是为什么您可以在这些平台上进行向后旋转的原因。此外,看起来没有办法从 Java 代码设置这些值,因此自定义 RotateDrawableCompat 可能在您的 future :)

HTH

关于android - 为蜂窝前的两层可绘制项目设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687071/

相关文章:

android - picasso :2个 fragment 之间的共享元素过渡

android - 具有自定义背景的可选择/可突出显示的列表项

android - 在 android TabLayout 上设置阴影

java - 从 Activity 与服务进行通信

android - 在GCM android的推送通知中自动扩展图像

java - 带有一些 ImageView 的动画包

android - 在同一个动画 xml 文件中应用两个动画

android - 如何设置按钮之间的距离?

android - map 的 Android 键类似于 youtube 键吗?

java - 我如何将我的应用程序在 Play 商店中的当前价格获取到每个位置以便在 textView 中显示