3、看了上面的例子,因为设置的操作的属性只有一个,那么如果我希望一个动画能够让View既可以缩小、又能够淡出(3个属性scaleX,scaleY,alpha),只使用ObjectAnimator咋弄?
想法是不是很不错,可能会说使用AnimatorSet啊,这一看就是一堆动画塞一起执行,但是我偏偏要用一个ObjectAnimator实例实现呢~下面看代码:
[java] view plain copy
-
public void rotateyAnimRun(final View view)
-
{
-
ObjectAnimator anim = ObjectAnimator//
-
.ofFloat(view, “zhy”, 1.0F, 0.0F)//
-
.setDuration(500);//
-
anim.start();
-
anim.addUpdateListener(new AnimatorUpdateListener()
-
{
-
@Override
-
public void onAnimationUpdate(ValueAnimator animation)
-
{
-
float cVal = (Float) animation.getAnimatedValue();
-
view.setAlpha(cVal);
-
view.setScaleX(cVal);
-
view.setScaleY(cVal);
-
}
-
});
-
}
把设置属性的那个字符串,随便写一个该对象没有的属性,就是不管~~咱们只需要它按照时间插值和持续时间计算的那个值,我们自己手动调用~
效果:
这个例子就是想说明一下,有时候换个思路不要被API所约束,利用部分API提供的功能也能实现好玩的效果~~~
比如:你想实现抛物线的效果,水平方向100px/s,垂直方向加速度200px/s*s ,咋实现呢~~可以自己用ObjectAnimator试试~
4、其实还有更简单的方式,实现一个动画更改多个效果:使用propertyValuesHolder
[java] view plain copy
-
public void propertyValuesHolder(View view)
-
{
-
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(“alpha”, 1f,
-
0f, 1f);
-
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(“scaleX”, 1f,
-
0, 1f);
-
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat(“scaleY”, 1f,
-
0, 1f);
-
ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(1000).start();
-
}
4、ValueAnimator实现动画
和ObjectAnimator用法很类似,简单看一下用view垂直移动的动画代码:
[java] view plain copy
-
public void verticalRun(View view)
-
{
-
ValueAnimator animator = ValueAnimator.ofFloat(0, mScreenHeight
-
- mBlueBall.getHeight());
-
animator.setTarget(mBlueBall);
-
animator.setDuration(1000).start();
-
}
给你的感觉是不是,坑爹啊,这和ValueAnimator有毛线区别但是仔细看,你看会发现,没有设置操作的属性也就是说,上述代码是没有任何效果的,没有指定属性
这就是和ValueAnimator的区别之处:ValueAnimator并没有在属性上做操作,你可能会问这样有啥好处?我岂不是还得手动设置?<