本篇主要为Android Animation分析
导读:
1.Animation是什么?
2.Animation分类
3.Tween Animation
4.监听器和插值器
5. LayoutAnimationsController
6.Frame-By-Frame Animation
7.Property Animation
8.总结
五.LayoutAnimationsController
1、LayoutAnimationsController定义:为layout里的控件,或者是viewgroup里面的控件设置动画效果, 每一个控件都有相同的动画, 动画效果可以在不同的时间显示出来,可以在java里面设置,也可以在xml中设置
2.使用方法一:(以listview举例)
在res/anim中创建item——anim文件和layout.xml文件,分别如下:
<!--创建动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1"
android:duration="800"
/>
</set>
<!--控制-->
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.2"
android:animationOrder="random"
android:animation="@anim/item_anim"
>
</layoutAnimation>
<!--代码含义:
delay:设置显示延时
Order:设置显示方式(另外还有normal和reverse两种方式)
animation:动画文件
-->
然后在xml为listview添加如下配置android:layoutAnimation=”@anim/layout”
这样子就ok了。
使用方法二:
获取到listview对象后,添加以下代码:
//创建Animation对象
Animation animation=(Animation) AnimationUtils.loadAnimation(ScrollingActivity.this,R.anim.item_anim);
LayoutAnimationController layoutAnimationController=new LayoutAnimationController(animation);
//设置相关属性 layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);
//配置动画
listView.setAnimation(layoutAnimationController);
六.Frame-By-Frame Animation
Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。
具体步骤:
1.设置好要展示的布局(例如可以添加一个imageView占位,两个button用于开始和停止动画)
2.在drawable目录下放置动画图片(Flash每一帧的图片)
例如我放了一个loading进度条的每一帧图片。
3.在drawable目录下添加anim_test.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/loading_1" android:duration="80" />
<item android:drawable="@drawable/loading_2" android:duration="80" />
<item android:drawable="@drawable/loading_3" android:duration="80" />
<item android:drawable="@drawable/loading_4" android:duration="80" />
<item android:drawable="@drawable/loading_5" android:duration="80" />
<item android:drawable="@drawable/loading_6" android:duration="80" />
<item android:drawable="@drawable/loading_7" android:duration="80" />
<item android:drawable="@drawable/loading_8" android:duration="80" />
<!--oneshot设置true为1次,false为多次-->
</animation-list>
4.在java中配置动画
按钮监听器里添加
imageView.setBackgroundResource(R.anim.anim_test);
AnimationDrawable animationDrawable = (AnimationDrawable)
imageView.getBackground();
animationDrawable.start();
逐帧动画同样有java实现的方法
//完全编码实现的动画效果
AnimationDrawable anim = new AnimationDrawable();
for (int i = 1; i <= 4; i++) {
//根据资源名称和目录获取R.java中对应的资源ID
int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());
//根据资源ID获取到Drawable对象
Drawable drawable = getResources().getDrawable(id);
//将此帧添加到AnimationDrawable中
anim.addFrame(drawable, 300);
}
anim.setOneShot(false); //设置为loop
image.setBackgroundDrawable(anim); //将动画设置为ImageView背景
anim.start(); //开始动画
//anim.stop();//停止动画
此部分java代码还可以封装起来达到多次利用的效果。
七.Property Animation
对于属性动画,下面是郭神的几篇文章,讲解的很好,大家可以参考一下
Android属性动画完全解析(上),初识属性动画的基本用法
Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
转载自郭霖的博客:CSDN博客
八.总结
本文参考:Mars Android视频第二季 和 我的github博客
如有错误,请在留言区指出。