Android学习笔记——动画(Animation)
来源:互联网 发布:sql 增加字段 默认值 编辑:程序博客网 时间:2024/05/20 23:30
一、Android动画简介。
Amination动画是一个android UI界面动画效果的API,可以实现淡入淡出,缩放,旋转,平移等效果。这些效果可以用在绝大多数的控件中。
二、Android动画分类。
Animation动画一般来说可以分为两类:补间动画,帧动画。
1、补间动画(Tweened Animation)
补间动画提供了4种效果:
一个View 可以设置多个动画效果,既可以同时设置,也可以让这些动画效果有一个先后顺序。
2、帧动画(Frame-to-Frame Animation)
帧动画可以创建一个drawable 的序列,按照一定的规则逐个播放这些drawable.
三、具体实现步骤
1、Tweened Animation
Tweeted Animation 可以用两种方式来实现:
- 1.用XML的方式实现。
- 2.用代码方式实现
1).用XML的方式实现:
XML方式实现是一种相对简单快捷且清晰明了的方式,通常来说写动画都推荐使用这种方式。
引用方式:
ImageView imageView = (ImageView)findViewById(R.id.image);Animation aim = AnimationUtils.loadAnimation(this, R.anim.first_anim);imageView.startAnimation(aim);
XML定义的动画放在/res/anim/文件夹内,XML文件的根元素可以 为 < alpha > , < scale >,< translate >,< rotate >,interpolator 元素或< set >(表示以上几个动画的集合,set内可以嵌套其他的标签)。
默认情况下,所有动画是同时进行的,可以通过startOffset属性设置 各个动画的开始偏移(开始时间)来达到动画顺序播放的效果。
例1:实现一个渐变动画:
/**
* 本例对一个TextView: mTvTest1实现了一个渐变动画:mTvTest1的文字从完全不透明经过500毫秒的时间变成完全透明,然后再慢慢变回回到完全不透明的状态,重复10次。
* 其中:
* fromeAlpha 表示的是开始时的透明度 ,1表示完全不透明,0表示完全透明
* toAlpha 表示的是结束时的透明度 ,1表示完全不透明,0表示完全透明
* repeatMode表示重复的方式,重复的方式有两种,一种是reverse,表示倒序回放,一种是restart,表示重复播放。repeatMode必须和repeatCount在一起使用才有意义。
* repeatCount表示重复的次数,
* duration 表示从开始透明度到结束透明度所经历的时间。
* fillBefore 值为true时表示动画结束后回到动画之前的状态。
* fillAfter 值为true时表示动画结束后保持动画结束之后的状态。
*/
文件1:first_anim.xml(位于res/anim/first_anim.xml,如果res下没有anim这个文件夹,新建一个。)
< ?xml version="1.0" encoding="utf-8"? > < setxmlns:android="http://schemas.android.com/apk/res/android"> < alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:repeatMode="reverse" android:repeatCount = "10" android:fillBefore="true" android:duration="500" /> < /set>
文件:MainActivity.java
package test.abby.com.animtest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.TextView; public class MainActivity extends AppCompatActivity {private TextView mTvTest1;private TextView mTvTest2;private TextView mTvTest3;private TextView mTvTest4;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindView(); initAnimation(); } private void bindView(){ mTvTest1 = (TextView) findViewById(R.id.text1); mTvTest2 = (TextView) findViewById(R.id.text2); mTvTest3 = (TextView) findViewById(R.id.text3); mTvTest4 = (TextView) findViewById(R.id.text4); } private void initAnimation(){ Animation anim = AnimationUtils.loadAnimation(this,R.anim.first_anim); mTvTest1.setAnimation(anim); }}
文件三:activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="test.abby.com.animtest.MainActivity"><TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /><TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /><TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /><TextView android:id="@+id/text4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /></LinearLayout>
例2,实现一个缩放动画:
/**
* scale标签是缩放动画,可以实现动态调控件尺寸的效果,有下面几个属性:
* android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
* android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
* android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
* android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
* android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)
android:pivotY 缩放起点Y轴坐标,取值及意义和pivotX一样。
* 本例在上例的基础上,对mTvTest2实现了一个缩放动画,最终动画的效果为:mTvTest2用2000毫秒的时间,以自己的中心为放大中心,将自己扩大3倍,并且保持放大之后的样子。
**/
文件1:MainActivity.java(基本和上例一样,只有initAnimation()方法有些改动)
private void initAnimation(){ Animation anim = AnimationUtils.loadAnimation(this,R.anim.first_anim); mTvTest1.setAnimation(anim); Animation anim2 = AnimationUtils.loadAnimation(this,R.anim.scale_anim); mTvTest2.setAnimation(anim2);}
文件2:scale_anim.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><scale android:fromXScale="1" android:fromYScale="1" android:pivotX="50%" android:pivotY="50%" android:toXScale="3.0" android:toYScale="3.0" android:duration = "2000" android:fillAfter="true"/></set>
例3.实现一个旋转动画:
/**
*本例在例2的基础上对mTvTest3实现了一个旋转动画。具体动画效果为:
* pivotX 和 pivotY
**/
文件1. rotate_anim.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><rotate android:duration="2000" android:pivotY="50%" android:pivotX="50%" android:fromDegrees="90" android:toDegrees="-90"/></set>
文件2:MainActivity.java(和上例基本一致,仅对initAnimation做改动)
private void initAnimation(){ Animation anim = AnimationUtils.loadAnimation(this,R.anim.first_anim); mTvTest1.setAnimation(anim); Animation anim2 = AnimationUtils.loadAnimation(this,R.anim.scale_anim); mTvTest2.setAnimation(anim2); Animation anim3 = AnimationUtils.loadAnimation(this,R.anim.rotate_anim); mTvTest3.setAnimation(anim3);}
下面这些是几个动画都通用的属性:
android:duration 动画持续时间,以毫秒为单位 android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态android:repeatCount 重复次数,0表示不重复,1表示重复一次,infinite表示无限循环。android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,具体的看下面的表格。
2).用代码方式实现:
Tweened Animation 代码实现步骤主要包括以下几个:
- 创建一个AnimationSet对象(Animation子类);
- 创建相应的Animation对象;
- 为Animation对象设置相应的数据;
- 将Animatin对象添加到AnimationSet对象当中;
- 使用控件对象开始执行AnimationSet;
创建AnimationSet有两种方式:
Android Developers中是这样写的:
AnimationSet(Context context, AttributeSet attrs)
//Constructor used when an AnimationSet is loaded from a resource.AnimationSet(boolean shareInterpolator)
//Constructor to use when building an AnimationSet from code
***************** 未完待续 ****************
- Android学习笔记——动画(Animation)
- android学习笔记——android动画Animation的讲解
- 动画学习笔记-Android Animation
- AjaxControltoolkit学习笔记—Animation动画控件
- Android——Animation笔记:视图动画
- Android——Animation笔记:布局动画
- Android 动画笔记——Animation (1)
- Android动画学习——Tween Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Android动画学习笔记-Android Animation
- Ajax 跨域问题最佳解决方案
- 移动端网络优化
- UIDatePicker常用属性 NSDateFormatter 时间戳转为本地时间
- 中国互联网进入“谱系之争”
- 智能机增长速度放缓,库克却乐开了坏
- Android学习笔记——动画(Animation)
- 黑马程序员——C基础之冒泡排序
- 滑雪总结 --- 双板滑雪
- android 文件权限
- Masonry初体验
- 增加bitcode支持编译第三方框架
- JS判断是否到达页面底部
- 黑马程序员——C基础之二维数组
- mac tomcat无法访问主页的原因之一