让我们说我有一个自定义对象,比如Point类(我没有使用Android中的那个),当用户加倍时,我需要慢慢地将其坐标从起始值更改为结束值点击屏幕。我已经完成了所有设置,但是我无法进行动画播放#34;这种变化。你知道我怎么做吗?
我已经尝试过类似的东西,但没有改变: ObjectAnimator(point," point.variable",final_value).start()
答案 0 :(得分:2)
您可能错误地设置了ObjectAnimator
。
假设您的Point
类具有一个整数的实例变量xPosition
。要使用xPosition
为ObjectAnimator
设置动画,您可以这样做:
ObjectAnimator.ofInt(new Point(), // Instance of your class
"xPosition", // Name of the property you want to animate
startValue, // The initial value of the property
... intermediateValues ..., // Any other desired values
endValue) // The final value of the property
.setDuration(duration) // Make sure to set a duration for the Animator
.start(); // Make sure to start the animation.
ObjectAnimator
将尝试在每个帧之后自动更新属性,但为了使其成功,您的类必须具有适当的setter方法,格式为setYourProperty
。所以在这个特定的例子中,你的类必须有一个名为setXPosition
的方法(注意驼峰的情况)。
如果由于某种原因,这不起作用,那么你会回到ValueAnimator
。您以类似的方式设置ValueAnimator
。
ValueAnimator anim = ValueAnimator.ofInt(startValue // Initial value of the property
endValue) // Final value of the property
.setDuration(duration); // Make sure to set a duration for the Animation.
这里的不同之处在于您必须手动更新您的财产。为此,我们向动画添加AnimatorUpdateListener
,动画中每个帧后将调用onAnimationUpdate
方法。
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// Manually call the xPosition's setter method.
point.setXPosition(animation.getAnimatedValue());
}
});
别忘了开始动画。
anim.start();
有关ValueAnimator
和ObjectAnimator
的详细信息,请参阅Google关于动态动画的API指南:
http://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator