Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Animate Rotate

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:

<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" /> 

I get an error: "No resource identifier found for attribute 'frameDuration' in package 'android'" - which means that frameDuration is a private attribute. Is there a way to use this "animate-rotate" feature?

My task is to replace the system's default indeterminate progress bar. I'd like to do it with as little code as possible (just change few attributes if possible). Using the ProgressBar view, setting:

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

and point "@drawable/pia_sivuvator" to that object would've make my task as elegant as they come but I'm stuck on those private attributes.

help?

like image 673
oriharel Avatar asked Dec 05 '10 15:12

oriharel


People also ask

How do you rotate an animation 90 degrees?

To set a custom rotate degree go to Animation Pane on the right (if it is not visible, you can click on Animation Pane to open it). Then right click on the animation and click Effect Options. Then choose Amount and open the popup menu. Enter the amount in Custom value and make sure to press ENTER to save the changes.


2 Answers

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); 
like image 129
Ian G. Clifton Avatar answered Oct 04 '22 21:10

Ian G. Clifton


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> 
like image 38
rwozniak Avatar answered Oct 04 '22 20:10

rwozniak