Android实现帧动画,以及出场时的动画
Posted Arcturis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android实现帧动画,以及出场时的动画相关的知识,希望对你有一定的参考价值。
最近有个小需求,在数据上传的时候加一个上传的动画,然后就寻思着自己写一个帧动画
上传开始的时候调用动画,上传结束通知容器将其删除(这个方法应该不会太耗内存),然后吐槽下gif图片还是我自己一帧一帧从ps上取出来然后另存为png格式的,哎,奖励自己一下竟然这么全能
写帧动画之前需要写一个帧list,命名为upload_anim.xml
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/s1" android:duration="50" /> <item android:drawable="@drawable/s2" android:duration="50" /> <item android:drawable="@drawable/s3" android:duration="50" /> <item android:drawable="@drawable/s4" android:duration="50" /> <item android:drawable="@drawable/s5" android:duration="50" /> <item android:drawable="@drawable/s6" android:duration="50" /> <item android:drawable="@drawable/s7" android:duration="50" /> <item android:drawable="@drawable/s8" android:duration="50" /> <item android:drawable="@drawable/s9" android:duration="50" /> <item android:drawable="@drawable/s10" android:duration="50" /> <item android:drawable="@drawable/s11" android:duration="50" /> <item android:drawable="@drawable/s12" android:duration="50" /> </animation-list>
比如这个有12帧的动画资源文件,我们来看看他怎么使用,这里要讲下ImageVIew是可以播放如以上代码所示的帧list的
使用时我只需将以上的帧list当做Drawbale放在ImageView的资源来用即可,然后我们在获取到这个资源使其播放起来!就可以实现了,然后再加上ImageVIew的入场动画!完美
ImageView imageView = new ImageView(context); animationIn = AnimationUtils.loadAnimation(context,R.anim.in); imageView.setAnimation(animationIn); imageView.setImageResource(R.drawable.upload_anim); final AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable(); animationDrawable.start(); ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 50,50); rlContentMain.addView(imageView,params);
注:上面有未声明的变量animationIn是Animation类型;rlContentMain是RelativeLayout类型为了放置动画的一个layout(我将这个动画放置在relativeLayout里然后加上动画,就有了点击然后动画的效果(*^__^*) ,设置params是为了控制动画资源的大小)
关键代码分析:使动画资源播放起来的关键代码就是标红的代码了,先定义一个AnimationDrawable然后其实例从imageVIew中get到,之后直接start()就可以播放起来
然后我还有R.anim.in这个是一个imageView进入时的动画,代码如下
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="-100%p" android:duration="600" /> </set>
实现的是简单的位移动画,fromYdelta是 源码解释:Change in Y coordinate to apply at the start of the animation即为 要应用于动画的开头的 Y 坐标的变化;
这样就完成了
当然还有其他的动画比如渐变,加速等等
以上是关于Android实现帧动画,以及出场时的动画的主要内容,如果未能解决你的问题,请参考以下文章
自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)(代码片段
android开发,ImageView加了逐帧动画。但放入WindowManager中,动画为啥实现不了