使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画。也可以比喻为像一卷胶卷一样按顺序播放。
播放起来,有点像在看gif图。
本文介绍使用AnimationDrawable类来实现动画效果。
为了开发方便,我们可以在xml中指定动画各个帧的信息。
这是第一个例子。我们先准备4张图片(图片请自备)放进res/drawable/
中。
在这个目录里,再新建一个文件ani_frame_1.xml
。
<?xml version="1.0" enCoding="utf-8"?><animation-List xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/ani_frame_1" androID:oneshot="false"> <item androID:drawable="@drawable/f_zan_1" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_4" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_3" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_2" androID:duration="250" /></animation-List>
可以看到根节点<animation-List>
包含了4个item
。每个子节点都定义了一个帧。duration
是这一帧的时常(毫秒)。drawable
是指定可绘制资源。oneshot="false"
,表示让动画一直循环播放下去。
这样动画资源就准备好了。
在layout中准备一个ImageVIEw,用它来显示动画
<ImageVIEw androID:ID="@+ID/iv1" androID:layout_wIDth="100dp" androID:layout_height="100dp" androID:layout_margintop="60dp" />
在activity中 *** 作这个ImageVIEw。把动画资源设置为背景。
var mFrameIv: ImageVIEw? = null// overrIDe fun onCreate(savedInstanceState: Bundle?)mFrameIv = findVIEwByID(R.ID.iv1)mFrameIv!!.setBackgroundResource(R.drawable.ani_frame_1)
把ImageVIEw的背景强转为AnimationDrawable。播放动画,要用AnimationDrawable.start()
方法。
val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawableani.start()
当动画正在播放时,调用start()
方法是不会影响当前播放的。
停止动画,AnimationDrawable.stop()
val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawableani.stop()
stop()
方法可以让动画停止在当前帧。再调用start()
的话,会从头开始播放。
前面我们利用的是ImageVIEw的背景资源。我们也可以使用src
。
准备另一个动画资源ani_frame_2
。
<?xml version="1.0" enCoding="utf-8"?><animation-List xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:ID="@+ID/ani_frame_1" androID:oneshot="true"> <item androID:drawable="@drawable/f_zan_1" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_4" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_3" androID:duration="250" /> <item androID:drawable="@drawable/f_zan_2" androID:duration="250" /></animation-List>
androID:oneshot="true"
,动画播放1次后就会自行停止并保持在最后一帧。
! 注意,停止后并不是回到第一帧。
然后在layout中,把它设置为ImageVIEw的src
。
<ImageVIEw androID:ID="@+ID/iv1" androID:layout_wIDth="100dp" androID:layout_height="100dp" androID:layout_margintop="60dp" androID:src="@drawable/ani_frame_2" />
在activity中就不是 *** 作ImageVIEw的background
了,而是 *** 作drawable
。
// 启动val ani: AnimationDrawable = frameIv.drawable as AnimationDrawableani.start()// 停止val ani: AnimationDrawable = frameIv.drawable as AnimationDrawableani.stop()
可以看到,2个例子中都需要 *** 作AnimationDrawable。
请务必注意,对 AnimationDrawable.start()
方法不能在 Activity 的 onCreate()
方法期间调用,因为 AnimationDrawable 尚未完全附加到窗口。如果想立即播放动画而无需互动,那么可能需要从 Activity 中的 onStart()
方法进行调用,该方法会在 AndroID 在屏幕上呈现视图时调用。
AnimationDrawable类有几个属性可以注意一下
属性 | 说明 |
---|---|
以上是内存溢出为你收集整理的Android 帧动画使用全部内容,希望文章能够帮你解决Android 帧动画使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)