Android动画旋转

时间:2010-12-05 15:04:02

标签: android animation progress-bar customization

我在Android代码中进行了一些挖掘,并在不确定的进度条中看到了它的使用。在尝试用这个标签创建我自己的drawable之后:

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_pia"
    android:pivotX="50%"
    android:pivotY="50%"
    android:framesCount="12"
    android:frameDuration="100" />

我收到错误: “在'android'包中找不到属性'frameDuration'的资源标识符” - 这意味着frameDuration是私有属性。 有没有办法使用这个“动画旋转”功能?

我的任务是替换系统的默认不确定进度条。我想尽可能少地编写代码(如果可能的话,只需更改一些属性)。 使用ProgressBar视图,设置:

android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"

并指向该对象的“@ drawable / pia_sivuvator”将使我的任务变得优雅,但我仍然坚持这些私有属性。

帮助?

5 个答案:

答案 0 :(得分:59)

我遇到了完全相同的问题。您可以排除这些参数(framesCount和frameDuration),它可能适合您。我尝试将它们排除在外并且动画很好,但是我设置的宽度/高度没有得到尊重,所以我最终创建了一个简单的旋转动画和一个ImageView来应用它。这是动画文件(res / anim / clockwise_rotation.xml):

<?xml version="1.0" encoding="utf-8"?>
<rotate
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:fromDegrees="0"
  android:interpolator="@android:anim/linear_interpolator"
  android:toDegrees="360"
  android:pivotX="50%"
  android:pivotY="50%"
  android:duration="1000"
  android:startOffset="0"
/>

然后你只需夸大你的动画,设置重复次数,然后从视图中启动它

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);

答案 1 :(得分:8)

我不知道如何解决私有属性,我遇到同样的问题。

顺便说一句,如果你想改变ProgressBar的那些属性:

android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"

你可以使用样式框架轻松地在values/styles.xml文件中定义一个扩展标准android的ProgressBar样式:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
        <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>

然后将其应用于xml布局文件中的进度条。

...
<ProgressBar
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     style="@style/YourProgressBarStyle"/>
...

答案 2 :(得分:8)

使用layer-list作为可绘制资源,而不是创建动画(需要更多代码,而不仅仅是XML配置)。 有趣的是layer-listanimated-rotate更流畅。

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

然后当然在Mario Lenci所写的样式中使用它:

<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
    <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>

答案 3 :(得分:5)

我通过使用这个可绘制的xml来解决这个问题。虽然在较新版本的Android上看起来似乎很顺利:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/spinner_pia"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="1080" />

答案 4 :(得分:4)

以下是旋转动画的简单说明,试试这将有助于您

http://androidtutorials60.blogspot.in/2013/09/simple-rotate-animation-in-android.html

<rotate xmlns:android="”http://schemas.android.com/apk/res/android”">
  android:duration="4000"
  android:fromdegrees="0"
  android:pivotx="50%"
  android:pivoty="50%"
  android:todegrees="360"
  android:toyscale="0.0"
</rotate>