Animation defined in XML doesn't start - android

I found the pngs for the standard progress spinner in Android. However, when I try to animate them in a similar way to how android does it with the following code nothing happens. They just appear to be a static icons.
The button
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#anim/anim"
android:drawableRight="#anim/anim" >
</Button>
The animation
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<rotate
android:drawable="#drawable/spinner_76_outer_holo"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="1080" />
</item>
<item>
<rotate
android:drawable="#drawable/spinner_76_inner_holo"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="720"
android:toDegrees="0" />
</item>
</layer-list>
Is it even possible to start animations automatically that is defined in XML only or do they have to be started with java?

You can use animated-rotate but that will only work on API 11+. If you use rotate, then you'll have to start them in Java, and animate them by animating the level (drawable.setLevel()) between 0 and 10000 (sounds weird? It is, but it's how it's done).

Related

animate single layer-list item in android

I have a "layer-list" (rotated_image.xml) which is a "imageview" background:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap
android:gravity="center"
android:src="#drawable/shadow" />
</item>
<item>
<bitmap
android:gravity="center"
android:src="#drawable/bg" />
</item>
<item>
<rotate
android:duration="5000"
android:fromDegrees="0"
android:interpolator="#drawable/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="360" >
<bitmap
android:gravity="center"
android:src="#drawable/button" />
</rotate>
</item>
1) I need to start and stop third image rotation on "imageview" click. I do not know how to get reference to my third item in layer-list and how to start animation?
2) I also need to put opacity to my second item in list, is it possible?
3) Can I combine one more animation here (fade in-fade out), I need it for my first item in list?
If my question is to complicated, can someone give me good reference or advice?
Thanks,
Milos

rotate and repeat image using xml

I want to set background image with rotation and repeating the background image.
For repeating
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="#drawable/border"
android:tileMode="repeat" />
For rotation
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:drawable="#drawable/border">
Now I want to combine this code in one drawable and want to use as background
I'm trying like this but not working
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:tileMode="repeat" >
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:drawable="#drawable/border">
</rotate>
</bitmap>
I would suggest you to use a custom view. I also tried that for my animated background. Just use thread, handler and canvas.scale() method for rotating the view background. And one thing i wanna ask. Whats the need of setting as background? You can set the rotating drawable as a background view and do the other things on the view above with transparent background.
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="-45"
android:pivotX="50%"
android:pivotY="50%">
<bitmap
android:alpha=".5"
android:src="#drawable/image"
android:tileMode="repeat" />
</rotate>

How to decrease the speed of custom ProgressBar

I have implemented a custom progress bar and I am displaying it while getting data from an URL, it is working fine as progress bar is spinning, but my problem is that I am not able to find a proper way to decrease its revolving speed, currently it is spinning very fast.
please help me with your suggestions and reply.
xml layout for progress bar:-
<ProgressBar
android:id="#+id/showProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminateDrawable="#drawable/my_progress_indeterminate" />
Also here's "my_progress_indeterminate" which is used to rotate my custom progressbar :-
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/image_loading"
android:pivotX="50%"
android:pivotY="50%" />
please share some example if possible to decrease the speed of rotation.
Any suggestions will be appreciated.
add in code to progress.xml
android:fromDegrees="0"
android:toDegrees="1080" <!-- Add in code to progress custumize xml to speed up -->
Try this. It will help you.
Create progressbar_custom.xml
/res/drawable/progressbar_custom.xml:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadius="18dp"
android:shape="ring"
android:thickness="5dp"
android:useLevel="false" >
<size
android:height="48dp"
android:width="48dp" />
<gradient
android:centerColor="#802A67AD"
android:centerY="0.5"
android:endColor="#ff2A67AD"
android:startColor="#002A67AD"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
Add Progressbar in XML files
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="#drawable/progressbar_custom" />
Use "rotate" instead of "animated-rotate" and changing android:toDegrees or android:toDegress should make it go slower.
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/image_loading"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />

Android Custom ProgressBar not Rotating

I want to change the default animation of a ProgressBar, so I added a custom style in my theme:
styles.xml
<style name="ProgressTheme" parent="#android:style/Widget.ProgressBar.Large">
<item name="android:indeterminateDrawable">#drawable/spinner_holo_light</item>
</style>
I am calling this style inside my ProgressBar with the following:
ProgressBar.xml
<ProgressBar
android:id="#+id/loadingProgressBar"
style="#style/ProgressTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
The problem lies inside the spinner_holo_light.xml:
If I use the following, everything works fine on devices with os 3.0+, but the progress does not rotate on older os versions:
spinner_holo_light.xml
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/spinner_76_inner_holo"
android:fromDegrees="720"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="0" />
But if I use animate-rotate instead, the animation works on every os version, but the result is a very laggy animation.
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/spinner_76_inner_holo"
android:fromDegrees="720"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="0" />
What do you think about it? Am I doing something wrong here?
On older devices it is a problem when android:fromDegrees is bigger than android:toDegress in <rotate>. Try swapping the values:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/spinner_76_inner_holo"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="720" />
Alternatively, you can try setting it as infinite:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/spinner_76_inner_holo"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite" />
The animation might be laggy on older devices. To fix this add android:animationResolution to the style:
<style name="ProgressTheme" parent="#android:style/Widget.ProgressBar.Large">
<item name="android:indeterminateDrawable">#drawable/spinner_holo_light</item>
<item name="android:animationResolution">33</item>
</style>
Make transparent background of progress dialog.
Make border less progress dialog.
And customization of color of spinner of circular progress dialog.
http://pankajchunchun.wordpress.com/2011/09/10/customization-of-spinner-progress/
I couldn't get it work on Samsung Galaxy S Plus even adding
<item name="android:animationResolution">33</item>
I was asking something similar to your response #Tomik
Android Progress Bar slow rotation on pre HoneyComb devices
Is it smoothly on all the pre honeycomb devices for sure?
I Solved this Problem by Changing BackGround xml Custom format to indeterminateDrawable
Use android:indeterminateDrawable except android:BackGround
<ProgressBar
android:layout_centerHorizontal = "true"
android:layout_centerVertical = "true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable = "#drawable/progressbar"
android:id="#+id/progressBar"
android:indeterminate = "true"/>
And Custom Progressbar XML Code
<?xml version="1.0" encoding="utf-8" ?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360">
<shape android:shape="ring" android:innerRadiusRatio="3"
android:thicknessRatio="7" android:useLevel="false">
<size android:width="76dip" android:height="76dip" />
<gradient android:type="sweep" android:useLevel="false"
android:startColor="#android:color/transparent"
android:endColor="#00FF00"
android:angle="0" />
</shape>
</rotate>

How to increase the rotation speed in android?

I have an image drawable. i rotating the image like a progress bar.
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
android:toDegrees="360" android:drawable="#drawable/spinner_white_48" />
i want to increase the rotation speed? for that, What attribute i have to use?
Setting duration and/or repeat count did not help me with an indeterminate ProgressBar animation. I had to increase the toDegrees to have it make additional loops:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="#drawable/ic_indeterminate_progress"
android:duration="1"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="1080" /> <!--1080 is 3 loops instead of 1 in same amt of time-->
According to this link:
The rotation speed of the indeterminate progress bar is fixed at one
revolution every 4 seconds, changing the duration attribute in the
drawable XML has no effect. If you prefer to speed it up, you can
change the toDegrees attribute to multiples of 360:
720 makes one turn in 2 seconds
1080 makes one turn in 1.33 seconds
1440 makes one turn in 1 second
In addition, you can just use indeterminateDuration for the ProgressBar.
add in code to progress.xml
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="1080" /> <!--1080 is 3 loops instead of 1 in same amt of time-->
Set the duration and repeatCount that you want the animation to run.
android:duration="required value in ms"
add in code to progress.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="1440">
<shape
android:shape="ring"
android:innerRadiusRatio="3"
android:thicknessRatio="8"
android:useLevel="false">
<size
android:width="76dip"
android:height="76dip" />
<gradient
android:type="sweep"
android:useLevel="false"
android:startColor="#FF0000"
android:endColor="#00ffffff"
android:angle="0"/>
</shape>
</rotate>

Categories

Resources