本文主要是介绍安卓帧动画简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天给大家分享一个安卓的逐帧动画.下面就简称帧动画了.
先说一下优点,代码简单,设置简单,而且动画流畅.
再说一个最大的缺点,只能用于轻量级的动画,图片过大,过多都有可能导致内存溢出!!!
常见使用情景.新界面空白页的加载动画,下拉刷新动画,网络请求加载动画等等.
说完了基础介绍,下面就介绍一下帧动画吧.
首先最简单的使用.只需要把图片都放到资源目录下.
Drawablel创建资源文件 比如我这个 level_up_1_anim.xml
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><itemandroid:drawable="@drawable/level_up1_00"android:duration="125" /><itemandroid:drawable="@drawable/level_up1_01"android:duration="125" /><itemandroid:drawable="@drawable/level_up1_02"android:duration="125" /><itemandroid:drawable="@drawable/level_up1_03"android:duration="125" /> </animation-list>
标签使用 animation-list
这里重点注意一个属性,android:oneshot,这个属性是用来设置动画是否循环播放的.其他的没什么难点.就按照Ui定的时间以及资源图片,对应起来,设置好动画资源就好了.
下面说一下使用这个动画,超简单的使用,直接创建ImageView,src设置这个资源目录.在代码中,先强转成 (AnimationDrawable) mImageView.getDrawable(); 调用start()方法即可.另外,我这边自己封装了一个类供大家使用.拓展了动画的start 和end方法.以及代码设置动画资源的方法.原理都差不多.
@SuppressWarnings("unused") public class AnimationImageView extends ImageView {private FrameAnimationListener mListener;private AnimationDrawable mAnimation;public AnimationImageView(Context context) {this(context, null, 0);}public AnimationImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public AnimationImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);startPlay();}private void startPlay() {Drawable drawable = getBackground();if (!(drawable instanceof AnimationDrawable)) {return;}mAnimation = (AnimationDrawable) getBackground();post(new Runnable() {@Overridepublic void run() {if (mAnimation == null) {return;}mAnimation.start();if (mListener != null) {mListener.onStart();}if (mAnimation.isOneShot()) {postDelayed(new Runnable() {@Overridepublic void run() {if (mListener != null) {mListener.onEnd();}}}, getTotalDuration());}}});}public void setAnimationDrawable(@DrawableRes int drawableRes) {if (drawableRes == 0) {return;}setBackgroundResource(drawableRes);startPlay();}public int getTotalDuration() {int totalTime = 0;if (mAnimation != null) {for (int i = 0; i < mAnimation.getNumberOfFrames(); ++i) {totalTime += mAnimation.getDuration(i);}}return totalTime;}public void setAnimationListener(FrameAnimationListener listener) {this.mListener = listener;} }
public interface FrameAnimationListener {void onStart();void onEnd();}
这篇关于安卓帧动画简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!