Android 帧动画使用

Android 帧动画使用,第1张

概述帧动画 使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画。也可以比喻为像一卷胶卷一样按顺序播放。 播放起来,有点像在看gif图。 本文介绍使用AnimationD 帧动画

使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画。也可以比喻为像一卷胶卷一样按顺序播放。
播放起来,有点像在看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()的话,会从头开始播放。

使用src

前面我们利用的是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类有几个属性可以注意一下

@H_404_149@isOneshot@H_404_149@是否只播放1次,与xml中的androID:oneshot对应@H_404_149@isRunning@H_404_149@当前动画是否正在播放@H_404_149@numberOfFrames@H_404_149@帧的数量
属性说明
参考AndroID drawable动画 https://developer.android.com/guide/topics/graphics/drawable-animationres资源目录简介 https://an.rustfisher.com/android/resource/resources_overview/ 总结

以上是内存溢出为你收集整理的Android 帧动画使用全部内容,希望文章能够帮你解决Android 帧动画使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1119249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存