码迷,mamicode.com
首页 > 移动开发 > 详细

安卓开发_浅谈Android动画(四)

时间:2015-09-23 19:14:03      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:

Property动画

概念:属性动画,即通过改变对象属性的动画。

特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置

 

 

一、重要的动画类及属性值:

1、  ValueAnimator 基本属性动画类

 

方法

描述

setDuration(long duration)

设置动画持续时间的方法

setEvaluator(TypeEvaluator value)

设置插值计算的类型

setInterpolator(TimeInterpolator value)

设置时间插值器的类型

addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)

更新动画对象的监听事件

setRepeatCount(int value)

设置动画重复执行的次数

setRepeatMode(int value)

设置动画重复方式

addListener(Animator.AnimatorListener l)

设置监听事件

1、  动画开始时的监听

2、  动画结束时的监听

3、  动画重新开始时的监听

start()

开始执行动画

cancel()

停止当前执行的动画,属性值会停止在当前执行位置

end()

结束动画,属性值会停止在结束位置,即使没有播放完动画

 

2、  ObjectAnimator 对象属性动画类,继承自ValueAnimator

方法

描述

  • ofFloat(T target, Property<T, Float> property, float... values)

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的float类型的变化值

  • ofInt(T target, Property<T, Integer> property, int... values)

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的int类型的变化值

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

第一个参数为执行动画的对象。第二个值为属性,之后为一个不确定数目的object类型的变化值

setTarget(Object target)

设置执行动画的对象

 

 

3、  TimeInterpolator 时间插值器

设置动画执行的动作效果

Eg:animator.setInterpolator(new BounceInterpolator() //设置动画效果为跳跃

类型

描述

AccelerateInterpolator

加速,开始时慢中间加速

DecelerateInterpolator

减速,开始时快然后减速

AccelerateDecelerateInterolator

先加速后减速,开始结束时慢,中间加速

AnticipateInterpolator

反向 ,先向相反方向改变一段再加速播放

AnticipateOvershootInterpolator

反向加超越,先向相反方向改变,再加速播放,会超出目的值然后缓慢移动至目的值

BounceInterpolator

跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100

CycleIinterpolator

循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2 * mCycles * Math.PI * input)

LinearInterpolator

线性,线性均匀改变

OvershottInterpolator

超越,最后超出目的值然后缓慢改变到目的值

 

4、  PropertyValuesHolder

作用:对一个View执行多个属性动画,该类对多属性动画进行了优化,会合并一些invalidate()来减少刷新视图,该类在3.1中引入

 

5、TypeEvaluator  插值计算的类型

(1)、IntEvaluator:属性的值类型为int

(2)、FloatEvaluator:属性的值类型为float

(3)、ArgbEvaluator:属性的值类型为十六进制颜色值

 

6、常用动画属性

(1)translationX,translationY:移动坐标

(2)rotation,rotationX,rotationY:旋转,rotation用于2D旋转角度,3D中用到后两个

(3)scaleX,scaleY:缩放

(4)alpha:透明度

(5)backgroundColor:  背景

 

二、动画Demo

1、位移动画

 1 ValueAnimator animator = ObjectAnimator.ofFloat(image, "translationY", 300);//第一个参数为执行动画的对象 ImageView第二个参数为动画属性:y轴位移 ,第三个参数为value
 2             //动画执行的事件
 3             animator.setDuration(3000);
 4             animator.setRepeatCount(ValueAnimator.INFINITE); //设置循环次数:无限
 5             animator.setRepeatMode(ValueAnimator.REVERSE);   //设置循环方式:倒叙循环 
 6             
 7 //            设置加速效果
 8 //          animator.setInterpolator(new AccelerateDecelerateInterpolator());
 9             animator.setInterpolator(new BounceInterpolator()); //设置弹跳效果
10             animator.start();

效果:

技术分享

2、绕X轴旋转动画

1 ValueAnimator animator = ObjectAnimator.ofFloat(image, "rotationX", 0,720); 
              //第一个参数为执行动画的对象ImageView 第二个参数为动画属性,第三个参数为初始角度,第四个动画为结束角度
2 animator.setDuration(4000); 3 animator.setRepeatCount(ValueAnimator.INFINITE); 4 animator.setRepeatMode(ValueAnimator.REVERSE); 5 animator.start();

效果图:

技术分享

 

3、图片绕xy轴转动,两个属性动作的情况

1             PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("rotationY",0f,45f,90f,160f,260f,360f );
2             PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("rotationX",0f,360f );
3             
4              ValueAnimator  animator = ObjectAnimator.ofPropertyValuesHolder(image,pvh1,pvh2);//将多个需要并发执行的动画合并执行
5             animator.setDuration(4000);
6             animator.setRepeatCount(ValueAnimator.INFINITE);
7             animator.setRepeatMode(ValueAnimator.REVERSE);
8             animator.start();

效果图:

技术分享

4、多个属性动画一起执行的情况 

 1        AnimatorSet aSet = new AnimatorSet();
 2             ValueAnimator a1 = ObjectAnimator.ofFloat(image,"translationX",0f,200f);
 3             a1.setDuration(2000);
 4             
 5             ValueAnimator a2 = ObjectAnimator.ofFloat(1f,1.5f,1.0f);
 6             a2.addUpdateListener(new AnimatorUpdateListener() {
 7                 
 8                 @Override
 9                 public void onAnimationUpdate(ValueAnimator animation) {
10                     // TODO Auto-generated method stub
11                     //更新对象的属性的方法
12                     float value = (Float) animation.getAnimatedValue();
13                     image.setScaleX(value);
14                     image.setScaleY(value);
15                     
16                 }
17             });
18             a2.setDuration(1000);
19             
20             //旋转
21             ValueAnimator a3 = ObjectAnimator.ofFloat(image,"rotation",0f,360);
22             a3.setDuration(3000);
23             
24             //渐变
25             ValueAnimator a4 = ObjectAnimator.ofFloat(image,"alpha",1f,0f);
26             a4.setDuration(1000);
27             
28             aSet.play(a1).with(a3);
29             aSet.play(a2).after(a3);
30             aSet.play(a2).with(a4);
31             
32             aSet.start();

 

效果图:

技术分享

 

5、布局背景动画

1 //改变主布局的背景实现动画效果
2             animator = ObjectAnimator.ofInt(linearLayout,"backgroundColor",Color.WHITE,Color.BLUE,Color.GREEN,Color.RED);
3             //设置颜色值得差值类型
4             animator.setEvaluator(new ArgbEvaluator());
5             animator.setDuration(5000);
6             animator.setRepeatCount(ValueAnimator.INFINITE);
7             animator.setRepeatMode(ValueAnimator.REVERSE);
8             animator.start();

效果图:

技术分享

 

--------------------------------------------------------------------------------------------------------------------------------

相关知识:

安卓开发_浅谈Android动画(一)

安卓开发_浅谈Android动画(二)

安卓开发_浅谈Android动画(三)

 

安卓开发_浅谈Android动画(四)

标签:

原文地址:http://www.cnblogs.com/xqxacm/p/4833005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!