帧动画的原理:
把将动画拆分为 帧(一张张图片) 的形式,按照顺序播放出来。
帧动画的特点:
优点:使用简单,方便。
缺点:使用大量的图片资源,容易引起OOM。
帧动画的效果:

图片资源

帧动画的使用:
首先要把资源文件放到drawable文件夹中
帧动画的使用分为两种:1.Java代码实现 和 2. xml文件实现
-
Java代码实现
/** * 获取资源 */ private void getRecordDrawable() { mAnimationDrawable = new AnimationDrawable(); for (int i = 0; i <= 12; i++) { int id = getResources().getIdentifier("record_animate_" + i, "drawable", getPackageName()); Drawable drawable = getResources().getDrawable(id); mAnimationDrawable.addFrame(drawable, 50); } } /** * 开启动画 */ private void start() { //oneshot: true只展示一次。 // false不停的循环播放动画。 mAnimationDrawable.setOneShot(true); mIvshow.setImageDrawable(mAnimationDrawable); // 获取资源对象 mAnimationDrawable.stop(); // 在动画start()之前一定要先stop() // 不然在第一次动画之后会停在最后一帧 // 这样动画就只会触发一次 mAnimationDrawable.start(); } /** * 停止动画 */ private void stop() { mAnimationDrawable.setOneShot(true); mIvshow.setImageDrawable(mAnimationDrawable); // 获取资源对象 mAnimationDrawable.stop(); } -
xml文件实现
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <!-- oneshot: true只展示一次。 false不停的循环播放动画。 android:duration 图片显示时间长度 --> <item android:drawable="@drawable/record_animate_1" android:duration="50"></item> <item android:drawable="@drawable/record_animate_2" android:duration="50"></item> <item android:drawable="@drawable/record_animate_3" android:duration="50"></item> <item android:drawable="@drawable/record_animate_4" android:duration="50"></item> <item android:drawable="@drawable/record_animate_5" android:duration="50"></item> <item android:drawable="@drawable/record_animate_6" android:duration="50"></item> <item android:drawable="@drawable/record_animate_7" android:duration="50"></item> <item android:drawable="@drawable/record_animate_8" android:duration="50"></item> <item android:drawable="@drawable/record_animate_9" android:duration="50"></item> <item android:drawable="@drawable/record_animate_10" android:duration="50"></item> <item android:drawable="@drawable/record_animate_11" android:duration="50"></item> <item android:drawable="@drawable/record_animate_12" android:duration="50"></item> <item android:drawable="@drawable/record_animate_13" android:duration="50"></item> </animation-list> private void startAnim(){ mIvshow.setImageResource(R.drawable.microphone); // 1. 设置动画 mAnimationDrawable = (AnimationDrawable) mIvshow.getDrawable(); // 2. 获取动画对象 mAnimationDrawable.start(); } private void stopAnim(){ mIvshow.setImageResource(R.drawable.microphone); // 1. 设置动画 mAnimationDrawable = (AnimationDrawable) mIvshow.getDrawable(); // 2. 获取动画对象 mAnimationDrawable.stop(); } -
kotlin
class MainActivity : AppCompatActivity(),View.OnClickListener{ override fun onClick(view: View) { var id = view.id; if (id == R.id.tvShow){ if (isOnclick) { isOnclick = false stop() } else { isOnclick = true start() } } } /**可变变量 * lateinit 不为null * */ lateinit var mAnimationDrawable: AnimationDrawable; private var mIvshow: ImageView? = null private var mTvShow: TextView? = null internal var isOnclick: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initView(); } private fun initView() { mTvShow = findViewById(R.id.tvShow) mIvshow = findViewById(R.id.ivShow) mTvShow?.setOnClickListener(this) getRecordDrawable() } fun getRecordDrawable() { mAnimationDrawable = AnimationDrawable() for (i in 1..13) { val id = resources.getIdentifier("record_animate_$i", "drawable", packageName) val drawable = resources.getDrawable(id) mAnimationDrawable.addFrame(drawable, 100) } } /** * 开启动画 */ private fun start() { //oneshot: true只展示一次。 // false不停的循环播放动画。 mAnimationDrawable.setOneShot(false) mIvshow?.setImageDrawable(mAnimationDrawable) // 获取资源对象 mAnimationDrawable.stop() // 在动画start()之前一定要先stop() // 不然在第一次动画之后会停在最后一帧 // 这样动画就只会触发一次 mAnimationDrawable.start() } /** * 停止动画 */ private fun stop() { mAnimationDrawable.setOneShot(true) mIvshow?.setImageDrawable(mAnimationDrawable) // 获取资源对象 mAnimationDrawable.stop() } }
到此为止,此篇帧动画也就介绍完成了。
2万+



被折叠的 条评论
为什么被折叠?



