Android动画之view动画
程序员文章站
2022-03-16 19:17:58
...
Android中的动画分为三种:View动画、帧动画、属性动画
View动画
一、概述:
View动画的作用对象是View
支持四种效果:平移(translate)、缩放(scale)、旋转(rotate)、透明(alpha)
分别对应这四个类:translateAnimation、scaleAnimation、rotateAnimation、alphaAnimation
二、使用
两种形式:XML和代码
1、xml
首先在res目录下创建anim目录
其次在anim目录下创建XML动画文件,如test_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime">
</translate>
然后将动画效果应用到view中
Button button = (Button) findViewById(R.id.test);
Animation translate = AnimationUtils.loadAnimation(this,R.anim.test_anim);
button.startAnimation(translate);
2、 代码
AlphaAnimation alpha = new AlphaAnimation(0,1);
alpha.setDuration(1000);
button.startAnimation(alpha);
3、监听
通过setAnimationListener的方法来监听view的动画,接口如下:
public static interface AnimationListener(){
void onAnimationStart(Animation animation);
void onAnimationEnd(Animation animation);
void onAnimationRepeat(Animation animation);
}
4、属性
<1> translate
android:fromXDelta 表示X的起始值,比如0;
android:toXDelta 表示X的结束值,比如100;
android:fromYDelta 表示Y的起始值,比如0;
android:toYDelta 表示Y的结束值,比如100;
<2> scale
android:fromXScale 表示水平方向缩放的起始值;
android:toXScale 表示水平方向缩放的结束值;
android:fromYScale 表示垂直方向缩放的起始值;
android:toYScale 表示垂直方向缩放的结束值;
android:pivotX 缩放的轴点x的坐标;
android:pivoty 缩放的轴点y的坐标;
<3> rotate
android:fromDegress 表示旋转开始的角度,比如0;
android:toDegress 表示旋转结束的角度,比如180;
android:pivotX 旋转的轴点x的坐标;
android:pivoty 旋转的轴点y的坐标;
<4> alpha
android:fromAlpha 表示透明度起始值,比如0;
android:toAlpha 表示透明度结束值,比如1;
除了上面介绍的值以外,还有一些同有的
android:interpolator 设置插值器,默认@android:anim/accelerate_decelerate_interpolator加速减速插值器
android:duration 动画持续时间
android:fillAfter 动画结束以后是否停留在结束位置,true停留,false不停留
5、set
可以使用set标签实现多个动画同时作用于view
三、自定义View动画
除了系统提供的四种View动画以外,还可以自定义View动画。
自定义View只需继承Animation抽象类,重写initialize和applyTransformation方法
在initialize中做一些初始化工作,applyTransformation中进行相应的矩阵变换。
public class Rotate3dAnimation extends Animation {
public Rotate3dAnimation(){}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//做一些初始化工作
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
//获取矩阵对象
Matrix matrix = t.getMatrix();
//do something...
}
}
四、view动画的特殊使用场景
1、 LayoutAnimation
LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样它的子元素出场时
都会具有这种动画效果。经常被用在ListView中。有两种形式:xml和代码。
xml通常需要以下几步。
<1> 在res/anim/目录定义LayoutAnimation,比如test_layout_animation.xml
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/test_anim_item"/>
android:delay 表示子元素的延迟时间。比如动画时间周期是300ms,则0.5表示每个子元素都需要延迟150ms才能播放入场动画。总体来说就是,第一个元素延迟150ms,第二个延迟300ms,一次类推
android:animationOrder 表示子元素的顺序,有三个选项:normal(顺序)、reverse(逆向)、random(随机)
android:animation 为子元素指定具体的入场动画
<2> 为子元素指定具体的入场动画。在res/anim/目录定义Animation,比如test_anim_item.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:anim/accelerate_interpolator">
<alpha
android:fromAlpha="0"
android:toAlpha="1" />
<translate
android:fromXDelta="500"
android:toXDelta="0">
</set>
<3> 为ViewGroup指定android:layoutAnimation属性,
<ListView
android:id="@+id/test_listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/test_layout_animation" />
代码(LayoutAnimationController)
ListView listView = (ListView) findViewById(R.id.test_listView);
//加载子元素的具体动画(这一步也可以使用代码实现)
Animation animation = AnimationUtils.loadAnimation(this,R.anim.test_anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5);
controller.setOrder(LayoutAnimation.ORDER_NORMAL);
listView.setLayoutAnimation(controller);
2、Activity切换动画效果
Activity有默认的切换效果,但也可以自定义,主要是用到overridePendingTranslation(int enterAnim, int exitAnim)方法。 这个方法必须在startActivity(intent)或finish()之后调用才能生效。
enterAnim -- Activity被打开时,所需的动画资源id;
exitAnim -- Activity被暂停时,所需的动画资源id;
推荐阅读
-
Android编程ProgressBar自定义样式之动画模式实现方法
-
Android自定义view Path 的高级用法之搜索按钮动画
-
Android控件系列之相册Gallery&Adapter适配器入门&控件缩放动画入门
-
Android编程实现仿心跳动画效果的方法
-
Android编程之界面跳动提示动画效果实现方法
-
Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍
-
Android中ViewFlipper的使用及设置动画效果实例详解
-
Android实现手势滑动和简单动画效果
-
Android图片翻转动画简易实现代码
-
Android 动画之ScaleAnimation应用详解