Android编程根据系列图片绘制动画实例归纳
Android编程中,通过系列图片绘制动画是一种常见且有效的方法,本文将详细探讨如何利用系统提供的Animation类和程序切割图片的方法来实现动画效果,并提供相关代码实例和问题解答。
一、使用系统提供的Animation类实现动画
1. 创建animation.xml文件
需要创建一个animation-list
类型的XML文件,用于定义动画序列,以下是一个简单的示例:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/a" android:duration="100"/> <item android:drawable="@drawable/b" android:duration="100"/> <item android:drawable="@drawable/c" android:duration="100"/> <item android:drawable="@drawable/d" android:duration="100"/> </animation-list>
这个文件定义了一个包含四张图片的动画序列,每张图片显示时间为100毫秒。
2. 在Activity中使用AnimationDrawable
在Activity中,可以通过以下步骤来使用这个动画:
AnimationDrawable animationDrawable = null; ImageView imageView = (ImageView)findViewById(R.id.imageView); animationDrawable = (AnimationDrawable) imageView.getBackground(); Button button0 = (Button)findViewById(R.id.button0); button0.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (!animationDrawable.isRunning()) { animationDrawable.start(); } } });
在这个例子中,当按钮被点击时,如果动画没有正在运行,则开始播放动画。
3. 设置单次播放
如果希望动画只播放一次,可以设置oneshot
属性为true
:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> ... </animation-list>
二、通过多帧图片绘制复杂动画
对于更复杂的动画,如人物走动,可以将多帧图片分成不同的方向(上、下、左、右)进行绘制,以下是具体步骤:
1. 定义动画数组
根据人物行走的方向,可以定义一个长度为4的动画数组:
int[] heroDownFrames = {R.drawable.hero_down_a, R.drawable.hero_down_b, R.drawable.hero_down_c, R.drawable.hero_down_d}; int[] heroLeftFrames = {R.drawable.hero_left_a, R.drawable.hero_left_b, R.drawable.hero_left_c, R.drawable.hero_left_d}; int[] heroRightFrames = {R.drawable.hero_right_a, R.drawable.hero_right_b, R.drawable.hero_right_c, R.drawable.hero_right_d}; int[] heroUpFrames = {R.drawable.hero_up_a, R.drawable.hero_up_b, R.drawable.hero_up_c, R.drawable.hero_up_d};
2. 创建Animation对象并触发动画
根据键盘事件触发相应的动画:
Animation heroAnimDown = new Animation(context, heroDownFrames, true); Animation heroAnimLeft = new Animation(context, heroLeftFrames, true); Animation heroAnimRight = new Animation(context, heroRightFrames, true); Animation heroAnimUp = new Animation(context, heroUpFrames, true);
三、通过程序切割单张图片实现动画
如果只有一张完整的图片,可以通过程序将其切割成多个帧图像来实现动画,以下是具体步骤:
1. 读取并切割图片
读取整张图片并将其切割成多个帧图像:
Bitmap testmap = ReadBitMap(context, R.drawable.enemy); Bitmap[][] bitmap = new Bitmap[ANIM_COUNT][ANIM_COUNT]; int tileWidth = testmap.getWidth() / ANIM_COUNT; int tileHeight = testmap.getHeight() / ANIM_COUNT; for (int i = 0; i < ANIM_COUNT; i++) { for (int j = 0; j < ANIM_COUNT; j++) { bitmap[i][j] = BitmapClipBitmap(testmap, j * tileWidth, i * tileHeight, tileWidth, tileHeight); } }
2. 根据方向触发不同的动画
根据人物行走的方向,触发相应的动画:
// 向下行走的动画 Animation heroAnimDown = new Animation(context, new int[]{bitmap[ANIM_DOWN][0], bitmap[ANIM_DOWN][1], bitmap[ANIM_DOWN][2], bitmap[ANIM_DOWN][3]}, true);
相关问题与解答
问题1: 如何调整动画的速度?
答: 可以通过修改每个<item>
标签中的android:duration
属性来调整动画的速度,数值越大,动画速度越慢;数值越小,动画速度越快,将android:duration="100"
改为android:duration="200"
会使动画速度减慢一倍。
问题2: 如何在动画结束后重复播放?
答: 如果希望动画在结束后自动重复播放,可以在animation-list
标签中设置android:oneshot="false"
,这样,当动画播放完毕后会重新从头开始播放,如果设置为true
,则动画只会播放一次。
到此,以上就是小编对于“Android编程根据系列图片绘制动画实例归纳”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/636667.html