I did some digging in Android code, and saw the use of in the indeterminate progress bar. after trying to create my own drawable with this tag:
I solved this by using this drawable xml. Although it only seems to be smooth on newer versions of 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" />
Here is the Simple Explanation of the Rotation Animation try this this will help you
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>
I ran into the exact same issue. You can exclude those parameters (framesCount and frameDuration), and it may work for you. I tried just excluding them and it animated fine, but the width/height I was setting were not being respected, so I ended up creating a simple rotation animation and an ImageView to apply it to. Here's the animation file (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"
/>
Then you just inflate your Animation, set repeat count, and start it from the View
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.clockwise_rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);
Instead of creating an animation (more code required, not only XML configuration), use layer-list
as drawable resource.
It is quite interesting that layer-list
is way more fluid than animated-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>
Then of course use it in the styles as Mario Lenci wrote:
<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>
I don't know how to work around the private attributes, I have the same problem.
By the way if you want to change those attributes of the ProgressBar:
android:indeterminateOnly="true"
android:indeterminateBehavior="cycle"
android:indeterminateDuration="3500"
android:indeterminateDrawable="@drawable/pia_sivuvator"
you can do it easily with the Styles framework defining in the values/styles.xml
file a ProgressBar style extending the standard android one:
<style name="YourProgressBarStyle" parent="@android:style/Widget.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate</item>
</style>
and then applying it to the progress bar in the xml layout file.
...
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/YourProgressBarStyle"/>
...