android 属性动画demo,Android 属性动画 demo

new Handler().postDelayed(new

Runnable() { @Overridepublic void

run() { ObjectAnimator translationY =

ObjectAnimator.ofFloat(btnSplshSkip,"ScaleX",0f,1f).setDuration(1000);ObjectAnimator

translationX =

ObjectAnimator.ofFloat(btnSplshSkip,"ScaleY",0f,1f).setDuration(500);AnimatorSet

set = new

AnimatorSet();set.setInterpolator(new

AccelerateDecelerateInterpolator());

//插补器set.setTarget(btnSplshSkip);

//动画目标set.playTogether(translationY,translationX);

//一起执行set.start();}},200);

ObjectAnimator是属性动画的一个常用类,下面就讲讲它的常用用法最常用属性:

alpha

透明度

rotation

z轴旋转

rotationX

x轴旋转

rotationY

y轴旋转

translationX

x水平偏移

translationY

y水平偏移

ScaleX

x轴缩放

ScaleY

y轴缩放

代码使用:

方法:

ObjectAnimator.ofFloat(target,propertyName,values...);

target

是动画目标

propertyName 是属性名字

values

是可变长度的值

从value1变化到v2到vn。。。

例子:

mIv是一个imageView

//alpha 从0 到1 的动画

ObjectAnimator.ofFloat(mIv, "alpha",

0f,1f)

.setDuration(500)

.start();

如果要实现其他效果,修改propertyName和values就行了。

那么如果要同时执行两个动画呢?

ObjectAnimator.ofFloat(mIv,"translationX",0f,360f) .setDuration(500)

.start();

ObjectAnimator.ofFloat(mIv,"translationY",0f,360f) .setDuration(500)

.start();

这么写会先后顺序执行?还是一起执行?还是?

file:///D:/有道笔记本地文件/nikiy_czn@163.com/776b66c26b74437996e85192bf45a939/scale.gif

效果是一起执行的,说明这动画是异步的

要一起执行动画,我们肯定首先会想到AnimationSet,android的属性动画也有Set类,叫做AnimatorSet

可以方便我们执行一系列动画:

先定义3个animator

ObjectAnimator alpha =

ObjectAnimator.ofFloat(mIv,"alpha",0f,1f).setDuration(300);

ObjectAnimator translationY =

ObjectAnimator.ofFloat(mIv,"translationY",0f,300f).setDuration(500);

ObjectAnimator translationX =

ObjectAnimator.ofFloat(mIv,"translationX",0f,300f).setDuration(500);

AnimatorSet set = new

AnimatorSet();

set.setDuration(500);

//动画执行时间

set.setStartDelay(500);

//执行动画之前的延迟

set.setInterpolator(new

AccelerateDecelerateInterpolator()); //插补器

set.setTarget(mIv);

//动画目标

set.playTogether(alpha,translationY,translationX);

//一起执行

set.start();

这里需要注意的是:

如上代码可以看到,AnimatorSet提供给我们更加强的控制能力,动画的一些设置最终都由AnimationSet决定。

什么意思呢?

比如说我们在alpha指定动画时间为300毫秒,其他两个指定为500毫秒,但是如果通过AnimatorSet.setDuration()来设置了时间的话,那么最终动画的时间就由AnimatorSet的设置决定。

另外我们也可以在之前的Animator指定不同的target,来分别对不同的view进行动画,但是跟上面所说的不同

,如果AnimatorSet.setTarget()指定了动画的目标的话,最终动画的目标还是由之前定义的Animator自己决定。

另外Set还能控制播放动画的顺序,我们之前的代码用的是playTogether

,顾名思义,就是一起执行,

Set还提供另外的方法顺序执行:

playSequentially

来按顺序执行动画:

set.playSequentially(translationX,alpha,translationY);  这样就会先后执行x

alpha y的动画。

one more

thing,AnimationSet还有

before

在xx之前

after

在。。。之后

with

和。。。一起

方法来安排顺序,顾名思义,自己尝试吧~

set.play(translationX).before(translationY).after(alpha);//先执行alpha,再x,再y

如果要一起执行动画,android还有一个PropertyValuesHolder

跟ObjectAnimator差不多

但是不需要设置target、duration

PropertyValuesHolder.ofxx(propertyName,values);

PropertyValuesHolder p1 =

PropertyValuesHolder.ofFloat("translationX",

0f,300f);

PropertyValuesHolder p2 =

PropertyValuesHolder.ofFloat("translationY",

0f,300f);

PropertyValuesHolder p3 =

PropertyValuesHolder.ofFloat("alpha",

0f,1f);

PropertyValuesHolder p4 =

PropertyValuesHolder.ofFloat("rotation",

0f,360f);

ObjectAnimator.ofPropertyValuesHolder

(mIv, p1,p2,p3,p4).setDuration(1000).start();

效果图:

file:///D:/有道笔记本地文件/nikiy_czn@163.com/0535d5f7be344f6bb9ae0c5126c27ebb/基本的propertyanim.gif

file:///D:/有道笔记本地文件/nikiy_czn@163.com/dd96c2e50aff4f6facad0e2180279ad4/scale.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值