动画自定义对象变量

时间:2015-06-10 01:06:51

标签: android animation interpolation

让我们说我有一个自定义对象,比如Point类(我没有使用Android中的那个),当用户加倍时,我需要慢慢地将其坐标从起始值更改为结束值点击屏幕。我已经完成了所有设置,但是我无法进行动画播放#34;这种变化。你知道我怎么做吗?

我已经尝试过类似的东西,但没有改变: ObjectAnimator(point," point.variable",final_value).start()

1 个答案:

答案 0 :(得分:2)

您可能错误地设置了ObjectAnimator

假设您的Point类具有一个整数的实例变量xPosition。要使用xPositionObjectAnimator设置动画,您可以这样做:

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();

有关ValueAnimatorObjectAnimator的详细信息,请参阅Google关于动态动画的API指南: http://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator