1、前言
在我们Android开发当中,用户的交互占了很大的比重,而动画在用户看来,是很好的用户体验,也就是说如果掌握了动画,在UI方面,就可以实现很炫酷的效果,
我是刘酸酸,今天第一次开博,将会写关于Android动画的一个专题,希望大家多多支持,有不对的地方可以在下方留言,我们一起进步,一起快乐的码代码。
2、正文
1、关于Android动画的总体的介绍,
Android当中的动画,主要分为Frame(逐帧动画),View动画(补间动画),Property动画(属性动画),
1、Frame(逐帧动画):做过视频的应该都知道,动作在某一瞬间就是一张图片,而这一张图片叫做这个视频的一帧,而帧动画就是在Drawable资源目录下去定义一系列的图片,而Android内部则让这一系列的图片动起来,就是所谓的帧动画,逐帧动画可以被定义在XML文件当中,也可以完全编码实现。
2、View动画(补间动画):通过对View的内容实现了一系列的图形变换操作,通过平移,缩放,旋转,改变透明度来实现动画的效果,在实现方面,可以通过XML文件来实现,也可以通过代码来实现
3、Property动画(属性动画):这个先略过,我们会在下一节当中详细讲解
2、通过Frame(逐帧动画)去实现一个动画。
1、通过XML去定义Drawable资源文件,通常我们会在/res目录下的anim或者drawable目录下定义一个自己的文件,楼主我目录为/res/drawable/loading_bg.xml
注意:我们需要把所用到的图片放在drawable下,
<span style="font-size:14px;"><?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/loading00" android:duration="100"/>
<item android:drawable="@drawable/loading01" android:duration="100"/>
<item android:drawable="@drawable/loading02" android:duration="100"/>
<item android:drawable="@drawable/loading03" android:duration="100"/>
<item android:drawable="@drawable/loading04" android:duration="100"/>
<item android:drawable="@drawable/loading05" android:duration="100"/>
<item android:drawable="@drawable/loading06" android:duration="100"/>
<item android:drawable="@drawable/loading07" android:duration="100"/>
<item android:drawable="@drawable/loading08" android:duration="100"/>
<item android:drawable="@drawable/loading09" android:duration="100"/>
<item android:drawable="@drawable/loading10" android:duration="100"/>
<item android:drawable="@drawable/loading11" android:duration="100"/>
<item android:drawable="@drawable/loading12" android:duration="100"/>
<item android:drawable="@drawable/loading13" android:duration="100"/>
<item android:drawable="@drawable/loading14" android:duration="100"/>
<item android:drawable="@drawable/loading15" android:duration="100"/>
<item android:drawable="@drawable/loading16" android:duration="100"/>
<item android:drawable="@drawable/loading17" android:duration="100"/>
<item android:drawable="@drawable/loading18" android:duration="100"/>
<item android:drawable="@drawable/loading19" android:duration="100"/>
<item android:drawable="@drawable/loading20" android:duration="100"/>
<item android:drawable="@drawable/loading21" android:duration="100"/>
<item android:drawable="@drawable/loading22" android:duration="100"/>
<item android:drawable="@drawable/loading23" android:duration="100"/>
<item android:drawable="@drawable/loading24" android:duration="100"/>
<item android:drawable="@drawable/loading25" android:duration="100"/>
<item android:drawable="@drawable/loading26" android:duration="100"/>
<item android:drawable="@drawable/loading27" android:duration="100"/>
<item android:drawable="@drawable/loading28" android:duration="100"/>
<item android:drawable="@drawable/loading29" android:duration="100"/>
<item android:drawable="@drawable/loading30" android:duration="100"/>
<item android:drawable="@drawable/loading31" android:duration="100"/>
<item android:drawable="@drawable/loading32" android:duration="100"/>
<item android:drawable="@drawable/loading33" android:duration="100"/>
<item android:drawable="@drawable/loading34" android:duration="100"/>
</animation-list>
</span>
<animation-list>元素是必须的,并且必须要作为根元素,可以包含一或多个<item>元素;
android:onshot如果定义为true的话,此动画只会执行一次,如果为false则一直循环。
<item>元素代表一帧动画,
android:drawable指定此帧动画所对应的图片资源,
android:druation代表此帧持续的时间,整数,单位为毫秒。
<layer-list>:是图层的意思,就是一个帧可以使用两张图片,而效果就是两张图片叠加在一块,
2、我们在自己的Activity的layout(/res/layout/activity_main.xml)文件当中引入自己的资源文件
<span style="font-size:14px;"> <ImageView
android:id="@+id/iv"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_centerInParent="true"
android:background="@drawable/loading_bg"
android:visibility="gone" />
</span>
大家可以理解为,我在这里去设置了一个载体,我们通过这个载体去播放动画,注意我在background属性引入了我的动画,3、在Activity当中使用AnimationDrawable类去开始我们的动画就OK了
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
ImageView imageView = (ImageView) findViewById(R.id.iv);
AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
anim.start();
}
4、当然我们有的时候需要动态的给AnimationDrawable动画当中去动态的去添加我们所说的帧,那么我们不用去定义Drawable的动画资源了
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
ImageView imageView = (ImageView) findViewById(R.id.iv);
AnimationDrawable animationDrawable = new AnimationDrawable();
for(int i = 0; i < 35; i++){
String name = i < 10 ? "0"+i : i+"";
//根据资源名称和目录获取R.java中对应的资源ID
int drawableId = getResources().getIdentifier("loading"+name, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(drawableId);
animationDrawable.addFrame(drawable, 100);
}
animationDrawable.setOneShot(false);
imageView.setBackgroundDrawable(animationDrawable);
// imageView.setBackground(animationDrawable);
animationDrawable.start();
}
楼主做的Demo是仿照音悦台App的加载框,大家可以看一下效果
明天晚上(2016/11/2)给大家讲解View动画,也就是Tween动画
希望大家多多支持,有错指出,