modify from ast exercise "set alpha of animationdrawable", we are going to create a new animationdrawable, copy frame from the original myanimationdrawable, and re-arrange frame order in reverse.



modify main.xml to add a imageview for the new animation.


Mã nguồn PHP:
[color=#000000]
[/color][color=#007700]<?[/color][color=#0000bb]xml version[/color][color=#007700]=[/color][color=#dd0000]"1.0" [/color][color=#0000bb]encoding[/color][color=#007700]=[/color][color=#dd0000]"utf-8"[/color][color=#0000bb]?>[/color]<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="set alpha" /> <seekbar android:id="@+id/setalpha" android:layout_width="fill_parent" android:layout_height="wrap_content" android:progress="255" android:max="255" /> <button android:id="@+id/startanimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start animation" /> <button android:id="@+id/stopanimation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="stop animation" /> <imageview android:id="@+id/myanimation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@anim/anim_android" /> <imageview android:id="@+id/myanimation2" android:layout_width="fill_parent" android:layout_height="fill_parent" /></linearlayout>
modify the java code, implement a new method copyreversedanim(). it return the new animationdrawable. then set it the imagedrawable of the imageview.


Mã nguồn PHP:
[color=#000000]
package com[/color][color=#007700].[/color][color=#0000bb]exercise[/color][color=#007700].[/color][color=#0000bb]androidanimation[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]app[/color][color=#007700].[/color][color=#0000bb]activity[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]graphics[/color][color=#007700].[/color][color=#0000bb]drawable[/color][color=#007700].[/color][color=#0000bb]animationdrawable[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]os[/color][color=#007700].[/color][color=#0000bb]bundle[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]view[/color][color=#007700].[/color][color=#0000bb]view[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]button[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]imageview[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]seekbar[/color][color=#007700];[/color][color=#0000bb]import android[/color][color=#007700].[/color][color=#0000bb]widget[/color][color=#007700].[/color][color=#0000bb]toast[/color][color=#007700];public class [/color][color=#0000bb]androidanimationactivity [/color][color=#007700]extends [/color][color=#0000bb]activity [/color][color=#007700]{ [/color][color=#ff8000]/** called when the activity is first created. */ [/color][color=#007700]@[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void oncreate[/color][color=#007700]([/color][color=#0000bb]bundle savedinstancestate[/color][color=#007700]) { [/color][color=#0000bb]super[/color][color=#007700].[/color][color=#0000bb]oncreate[/color][color=#007700]([/color][color=#0000bb]savedinstancestate[/color][color=#007700]); [/color][color=#0000bb]setcontentview[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]layout[/color][color=#007700].[/color][color=#0000bb]main[/color][color=#007700]); [/color][color=#0000bb]imageview myanimation [/color][color=#007700]= ([/color][color=#0000bb]imageview[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]myanimation[/color][color=#007700]); [/color][color=#0000bb]imageview myanimation2 [/color][color=#007700]= ([/color][color=#0000bb]imageview[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]myanimation2[/color][color=#007700]); final [/color][color=#0000bb]animationdrawable myanimationdrawable [/color][color=#007700]= ([/color][color=#0000bb]animationdrawable[/color][color=#007700])[/color][color=#0000bb]myanimation[/color][color=#007700].[/color][color=#0000bb]getdrawable[/color][color=#007700](); [/color][color=#ff8000]//copy a new animationdrawable in reversed order [/color][color=#007700]final [/color][color=#0000bb]animationdrawable reversedanimationdrawable [/color][color=#007700]= [/color][color=#0000bb]copyreversedanim[/color][color=#007700]([/color][color=#0000bb]myanimationdrawable[/color][color=#007700]); [/color][color=#ff8000]//apply the new animationdrawable [/color][color=#0000bb]myanimation2[/color][color=#007700].[/color][color=#0000bb]setimagedrawable[/color][color=#007700]([/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700]); [/color][color=#0000bb]seekbar setanimationalpha [/color][color=#007700]= ([/color][color=#0000bb]seekbar[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]setalpha[/color][color=#007700]); [/color][color=#0000bb]button startanimation [/color][color=#007700]= ([/color][color=#0000bb]button[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]startanimation[/color][color=#007700]); [/color][color=#0000bb]button stopanimation [/color][color=#007700]= ([/color][color=#0000bb]button[/color][color=#007700])[/color][color=#0000bb]findviewbyid[/color][color=#007700]([/color][color=#0000bb]r[/color][color=#007700].[/color][color=#0000bb]id[/color][color=#007700].[/color][color=#0000bb]stopanimation[/color][color=#007700]); [/color][color=#0000bb]startanimation[/color][color=#007700].[/color][color=#0000bb]setonclicklistener[/color][color=#007700](new [/color][color=#0000bb]button[/color][color=#007700].[/color][color=#0000bb]onclicklistener[/color][color=#007700](){ @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void onclick[/color][color=#007700]([/color][color=#0000bb]view arg0[/color][color=#007700]) { [/color][color=#ff8000]// todo auto-generated method stub [/color][color=#007700]if(![/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700].[/color][color=#0000bb]isrunning[/color][color=#007700]()){ [/color][color=#0000bb]myanimationdrawable[/color][color=#007700].[/color][color=#0000bb]start[/color][color=#007700](); [/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700].[/color][color=#0000bb]start[/color][color=#007700](); } }}); [/color][color=#0000bb]stopanimation[/color][color=#007700].[/color][color=#0000bb]setonclicklistener[/color][color=#007700](new [/color][color=#0000bb]button[/color][color=#007700].[/color][color=#0000bb]onclicklistener[/color][color=#007700](){ @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void onclick[/color][color=#007700]([/color][color=#0000bb]view arg0[/color][color=#007700]) { [/color][color=#ff8000]// todo auto-generated method stub [/color][color=#007700]if([/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700].[/color][color=#0000bb]isrunning[/color][color=#007700]()){ [/color][color=#0000bb]myanimationdrawable[/color][color=#007700].[/color][color=#0000bb]stop[/color][color=#007700](); [/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700].[/color][color=#0000bb]stop[/color][color=#007700](); } }}); [/color][color=#0000bb]setanimationalpha[/color][color=#007700].[/color][color=#0000bb]setonseekbarchangelistener[/color][color=#007700](new [/color][color=#0000bb]seekbar[/color][color=#007700].[/color][color=#0000bb]onseekbarchangelistener[/color][color=#007700](){ @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void onprogresschanged[/color][color=#007700]([/color][color=#0000bb]seekbar seekbar[/color][color=#007700], [/color][color=#0000bb]int progress[/color][color=#007700], [/color][color=#0000bb]boolean fromuser[/color][color=#007700]) { [/color][color=#0000bb]myanimationdrawable[/color][color=#007700].[/color][color=#0000bb]setalpha[/color][color=#007700]([/color][color=#0000bb]progress[/color][color=#007700]); [/color][color=#0000bb]reversedanimationdrawable[/color][color=#007700].[/color][color=#0000bb]setalpha[/color][color=#007700]([/color][color=#0000bb]progress[/color][color=#007700]); } @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void onstarttrackingtouch[/color][color=#007700]([/color][color=#0000bb]seekbar seekbar[/color][color=#007700]) { [/color][color=#ff8000]// todo auto-generated method stub [/color][color=#007700]} @[/color][color=#0000bb]override [/color][color=#007700]public [/color][color=#0000bb]void onstoptrackingtouch[/color][color=#007700]([/color][color=#0000bb]seekbar seekbar[/color][color=#007700]) { [/color][color=#ff8000]// todo auto-generated method stub [/color][color=#007700]}}); } private [/color][color=#0000bb]animationdrawable copyreversedanim[/color][color=#007700]([/color][color=#0000bb]animationdrawable src[/color][color=#007700]){ [/color][color=#0000bb]animationdrawable newanim [/color][color=#007700]= new [/color][color=#0000bb]animationdrawable[/color][color=#007700](); [/color][color=#0000bb]int numberofframe [/color][color=#007700]= [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getnumberofframes[/color][color=#007700](); for([/color][color=#0000bb]int i [/color][color=#007700]= [/color][color=#0000bb]0[/color][color=#007700]; [/color][color=#0000bb]i [/color][color=#007700]< [/color][color=#0000bb]numberofframe[/color][color=#007700]; [/color][color=#0000bb]i[/color][color=#007700]++){ [/color][color=#0000bb]newanim[/color][color=#007700].[/color][color=#0000bb]addframe[/color][color=#007700]( [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getframe[/color][color=#007700]([/color][color=#0000bb]numberofframe [/color][color=#007700]- [/color][color=#0000bb]i [/color][color=#007700]- [/color][color=#0000bb]1[/color][color=#007700]), [/color][color=#0000bb]src[/color][color=#007700].[/color][color=#0000bb]getduration[/color][color=#007700]([/color][color=#0000bb]numberofframe [/color][color=#007700]- [/color][color=#0000bb]i [/color][color=#007700]- [/color][color=#0000bb]1[/color][color=#007700])); } [/color][color=#0000bb]newanim[/color][color=#007700].[/color][color=#0000bb]setoneshot[/color][color=#007700]([/color][color=#0000bb]false[/color][color=#007700]); return [/color][color=#0000bb]newanim[/color][color=#007700]; }}[/color]