2015 project received a demand for a wizard animation, the animation of a total of 60 pictures, at that time using the full-A33 Development Board, through the use of Android animation set implementation, and then think of this way to achieve, the effect is smooth. Then write an open source project for your reference.
The following two ways to implement frame animation, using the same 80 280x280 PNG pictures to perform animation, resource occupancy comparison:
Code Address:
Https://github.com/ansen360/FrameAnimation
Sample effect:
Http://oma689k8f.bkt.clouddn.com/note/3/4.gif
Android animation set for frame animation
- 1 Create an animation set in the drawable directory Animalist.xml
<?xml version= "1.0" encoding= "Utf-8"?><animation-list xmlns:android="Http://schemas.android.com/apk/res/android" android:oneshot="false"> <!--80 photos played via Android animation set-- <itemandroid:drawable="@mipmap/c_1"android:duration="50" /> <itemandroid:drawable= "@mipmap/c_2"android:duration=" " /> <!--omitted ...- <itemandroid:drawable="@mipmap/circle_19"android:duration="50" /> <itemandroid:drawable="@mipmap/circle_20"android:duration= "/>" </animation-list>
- 2 Use this drawable in the layout file ImageView
<?xml version= "1.0" encoding= "Utf-8"?><linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android" xmlns:app =" Http://schemas.android.com/apk/res-auto " Span class= "Hljs-attribute" >xmlns:tools = "Http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = " Com.ansen.frameanimation.sample.MainActivity "; <ImageViewandroid:id= "@+id/image"android:layout_width="Wrap_ Content "android:layout_height="wrap_content "android:src=" @drawable/ Animlist " /> </linearlayout>
- 3 Call in code, start animation
ImageView image = (ImageView) findViewById(R.id.image); AnimationDrawable animationDrawable = (AnimationDrawable) image.getDrawable(); animationDrawable.start();
The animation starts the system resource usage as follows:
Manually triggering GC, memory footprint almost unchanged
Frameanimation Implementing Frame Animations
- 1 define the resource files that need to play the animation, define the resources in the arrays file, or define them in the code
<?xml version= "1.0" encoding= "Utf-8"?><resources> <!--80 photos played via Frameanimation- <array name="C"> <item>@mipmap/c_1</Item> <item>@mipmap/c_2</Item> <!--omitted ...- <item>@mipmap/circle_19</Item> <item>@mipmap/circle_20</Item> </array></Resources>
Gets an array of resources after the definition (the array of resource files can be directly defined in the code, ignoring the previous step):
privateint[] getRes() { TypedArray typedArray = getResources().obtainTypedArray(R.array.c); intlen = typedArray.length(); intnewint[len]; for (int0len; i++) { resId[i] = typedArray.getResourceId(i, -1); } typedArray.recycle(); return resId; }
- 2 call in code, start animation
ImageView image = (ImageView) Findviewbyid (r.id.image); Frameanimation frameanimation =NewFrameanimation (image, Getres (), -,true); Frameanimation.setanimationlistener (NewFrameanimation.animationlistener () {@Override Public void Onanimationstart() {LOG.D (TAG,"Start"); }@Override Public void Onanimationend() {LOG.D (TAG,"End"); }@Override Public void onanimationrepeat() {LOG.D (TAG,"Repeat"); } });
The animation starts the system resource usage as follows:
Manually triggering GC with significant memory footprint changes
Android frame animation, anti-Oom, save over 10 times times more resources than original vivid album