当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 属性动画

属性动画 时间:2018-09-27      来源:未知

Android提供了几种动画类型:View Animation(补间动画) 、Drawable Animation (帧动画)、Property Animation (属性动画)。View Animation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。比如:你希望View有一个颜色的切换动画;你 希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。这就是Property Animation产生的 原因。

新引入的属性动画机制已经不再是针对于View来设计的了,也不限定于只能实现移动、缩放、旋转和淡入淡出这几种动画操作,同时也不再只是一 种视觉上的动画效果了。它实际上是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性。

一、相关API

ObjectAnimator 动画的执行类

ValueAnimator 动画的执行类

AnimatorSet 用于控制一组动画的执行

setDuration() 设置动画时间

start() 开始动画

cancel() 停止动画在当前位置

end() 动画直接到终状态

setRepeatMode 设置动画重复方式

setRepeatCount设置动画重复次数

二、ObjectAnimator使用

ObjectAnimator是属性动画框架中重要的实现类,创建一个ObjectAnimator只需要通过它的静态方法直接返回一个ObjectAnimator对象。静态方 法如下:

ofFloat(Object target, String propertyName, float... values);

ofInt(Object target, String propertyName, int... values);

ofObject(Object target, String propertyName, TypeEvaluator evaluator, Object... values);

这里先关注ofFloat、ofint,方法中有三个参数:

Target:指定执行动画的view

propertyName:指定动画的属性

values:可变数组参数,指定属性对应的属性值

如下所示,给imageview设置渐变的动画。

ObjectAnimator animator = ObjectAnimator.ofFloat(imageview, "alpha", 1.0f, 0.0f);

// 设置时间

animator. setDuration(1000);

// 开始动画

animator.start();

 

下面列举出一些可以直接使用的属性:

translationX、translationY:这两个属性作为一种增量来控制着View对象从它布局容器的左上角坐标开始的位置。

rotation、rotationX、rotationY:这三个属性控制着View对象围绕它的支点进行2D和3D的旋转。

scaleX和scaleY:这两个属性控制着View对象围绕它的支点进行2D缩放。

alpha:它表示View对象的alpha透明度。

二、ValueAnimator使用

ValueAnimator是整个属性动画中核心的一个类,前面介绍的ObjectAnimator也是继承自ValueAnimator。

ValueAnimator本身不提供任何动画效果,它更像一个数值发生器,用来产生具有一定规律的数字,从而让调用者来控制动画的实现过程。通常情 况下,在ValueAnimator的AnimatorUpdateListener中监听数值的变化,从而完成动画的切换。

如下所示,利用ValueAnimator给imageview设置渐变的动画。

ValueAnimator animator = ValueAnimator.ofFloat(1.0f, 0.0f);

animator.setDuration(1000);

animator.start();

// 反复循环,REATART从头开始循环

animator.setRepeatMode(ValueAnimator.REVERSE);

animator.setRepeatCount(ValueAnimator.INFINITE);// 无限循环

animator.addUpdateListener(new AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

imageView.setAlpha((Float)animation.getAnimatedValue());

}

});

三、AnimatorSet使用

AnimatorSet这个类来帮我们实现组合属性动画的效果。AnimatorSet这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象 (ObjectAnimator或者ValueAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包含了以下四个方法:

after(Animator anim) : 将现有动画插入到传入的动画之后执行。

after(long delay):将现有的动画延迟指定的毫秒后执行。

before(Animator anim):将现有的动画插入到传入的动画之前执行。

with(Animator anim):将现有的动画和传入的动画同时执行。

// 移动动画

ObjectAnimator transAnimator = ObjectAnimator.ofFloat(mTextView, "translationX", -500f, 300f);

// 旋转动画

ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(mTextView, "rotation", 0f, 360f);

// 淡入淡出

ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(mTextView, "alpha", 1f, 0f, 1f);

AnimatorSet animatorSet = new AnimatorSet();

animatorSet.play(rotationAnimator).with(alphaAnimator).after(transAnimator);

animatorSet.setDuration(5000);

animatorSet.start();

四、Animator监听器

对于动画,一般都是一些辅助效果,比喻说一个view动画结束后里一个view开始动画,这就需要对动画过程进行监听。通过实现AnimatorListener 接口即可对动画的Start、End、Repeat、Cancel四个状态监听。

animator.addListener(new Animator.AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

Log.e("tag", "onAnimationStart");

}

@Override

public void onAnimationEnd(Animator animation) {

Log.e("tag", "onAnimationEnd");

}

@Override

public void onAnimationCancel(Animator animation) {

Log.e("tag", "onAnimationCancel");

}

@Override

public void onAnimationRepeat(Animator animation) {

Log.e("tag", "onAnimationRepeat");

}

})

上一篇:简析静态库与动态库

下一篇:数据拷贝的方法解析

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部