动画其实就是一帧一帧的画面顺序播放,造成的视觉上的残留来起到连贯的效果,帧动画就像放电影一样,把一组画面帧放在一起,然后这些画面帧就像电影胶片一样被顺序播放。帧动画也很简单,也可以通过Java代码或者xml代码实现。
我找到一个 .gif 图,然后用软件把它的全部帧分解,把这11帧全放到工程里,然后在drawable 文件夹下新建一个xml文件:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- 帧动画 Drawable Animation -->
<!--android:oneshot"true" 这个动画只会循环一次并停留在最后一帧。 -->
<!--android:oneshot"false" 这个动画将会不停的循环下去。 -->
<item
android:drawable="@mipmap/shit_1"
android:duration="100" />
<item
android:drawable="@mipmap/shit_2"
android:duration="100" />
<item
android:drawable="@mipmap/shit_3"
android:duration="100" />
<item
android:drawable="@mipmap/shit_4"
android:duration="100" />
<item
android:drawable="@mipmap/shit_5"
android:duration="100" />
<item
android:drawable="@mipmap/shit_6"
android:duration="100" />
<item
android:drawable="@mipmap/shit_7"
android:duration="100" />
<item
android:drawable="@mipmap/shit_8"
android:duration="100" />
<item
android:drawable="@mipmap/shit_9"
android:duration="100" />
<item
android:drawable="@mipmap/shit_10"
android:duration="100" />
<item
android:drawable="@mipmap/shit_11"
android:duration="100" />
</animation-list>
将这11帧组成一个animation-list,然后在客户端调用:
ivBasketball.setImageResource(R.drawable.drawable_animation);
AnimationDrawable mAnimationDrawable = (AnimationDrawable) ivBasketball.getDrawable();
mAnimationDrawable.start();
效果如下:
同样,帧动画也可以通过Java代码实现:
int[] drawableID = new int[]{R.mipmap.shit_1, R.mipmap.shit_2, R.mipmap.shit_3
, R.mipmap.shit_4, R.mipmap.shit_5, R.mipmap.shit_6
, R.mipmap.shit_7, R.mipmap.shit_8, R.mipmap.shit_9
, R.mipmap.shit_10, R.mipmap.shit_11};
AnimationDrawable mAnimationDrawable = new AnimationDrawable();
for (int i = 0; i < 11; i++) {
mAnimationDrawable.addFrame(getResources().getDrawable(drawableID[i]), 100);
}
mAnimationDrawable.setOneShot(false);
ivBasketball.setImageDrawable(mAnimationDrawable);
mAnimationDrawable.start();
Java代码实现看起来就没有xml代码清晰了,所以无论是补间动画还是帧动画,我都喜欢用xml代码实现。
帧动画也同样很简单,但是效果也比较单一,所以学习重点应该放在属性动画上,这里仍然只做个简单的记录。