一个月没写点东西,最近闲下来打算回顾一下android动画的知识,俗话说温故而知新,就算是简单的东西也要反复的记忆,才能够不会遗忘,废话不多说了,回顾一下常用的动画类型。

常用动画类型

帧动画

帧动画,顾名思义就是把一系列图片像放电影一样连续的播放,那就要求图片衔接有紧凑感,哈哈。可以跟美工“好好聊聊”了。

补间动画

补间动画,实现动画的效果是通过对view进行一些图形变换,如平移,旋转,缩放大小,透明度改变。view形式改变,自身的事件并未改变(此处稍后会列举实例去解释)

属性动画

属性动画,“属性”,看到这两个字应该就能理解到view的变化对自身固有属性产生了影响,与补间动画不同的是,view形式改变,自身的事件也发生改变(如果该view添加了点击事件,那么触发点击事件的位置应该是在view变化后的最终位置)

动画实例分析

帧动画FrameAnimation

这里我们拿一个项目中常用的例子来演示,为了增加用户体验,通常在网络加载过程中,我们会给用户显示一个loading的动画以示友好,那好,我们就用帧动画来实现这个效果。

首先,我们准备好一组动画loading要用的图片 loading_animlist.xml

这里要注意的是,animation-list这个tag只有在drawable文件下的xml中才能使用,duration是该帧图片所用的时间毫秒数

其次,需要给这组图片准备一个播放的载体,我们用imageview,这里我是直接在mainactivity的xml中放了一个图片

最后,在MainActivy的onCreate()方法中启动该动画

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.iv_load);
mImageView.setImageResource(R.drawable.loading_animlist);
AnimationDrawable animationDrawable = (AnimationDrawable) mImageView.getDrawable();
animationDrawable.start();
}

这样就完了么???

你会发现为什么动画不会动,而是静止的呢,如果有经验的朋友会发现,此时window还没初始化完成,那么帧动画是是没有找到该window的,(这里如果用过popupwindow的朋友会知道的),那有什么方法能够解决呢?android系统其实给我们提供了一个onWindowFocusChanged()的方法用来判断是否window初始化完成,那改代码吧,添加这个方法

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.iv_load);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
mImageView.setImageResource(R.drawable.loading_animlist);
AnimationDrawable animationDrawable = (AnimationDrawable) mImageView.getDrawable();
animationDrawable.start();
}

Android实现帧布局步骤 android 帧动画的替代方案_帧动画

另外还有的常用方法

//停止动画
animationDrawable.stop();
//动画是否正在播放
animationDrawable.isRunning();
//设置是否循环播放
animationDrawable.setOneShot(true);
//添加一张图片,并设置持续时间
animationDrawable.addFrame(getResources().getDrawable(R.drawable.loading_01),200);
//获取某一帧图片
animationDrawable.getFrame(0);

注意

帧动画适用图片比较少的情况,如果图片数量庞大,很容易会oom,不但如此,ui会很卡,体验不好,所以帧动画既简单实用,又需要注意细节。