我需要创建一个通过ValueAnimator转换为某些特定xy值的转换动画,因此我编写了以下代码,但它无法正常工作,并在NullPointerExceptionsvalueAnimator.getAnimatedValue("x")上抛出valueAnimator.getAnimatedValue("y")

ValueAnimator translate = ValueAnimator.ofInt(viewX, endX, viewY, endY);
translate.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        int valX = (Integer) valueAnimator.getAnimatedValue("x");
        int valY = (Integer) valueAnimator.getAnimatedValue("y");

        updateViewLayout(mWindowManager, view2animate, valX, valY, null, null);
    }
});
translate.setDuration(1000);
translate.start();


有任何想法吗?

最佳答案

这里的问题是,您正在尝试获取名为“ x”的属性的值,但尚未定义什么是“ x”以及其值是什么。因此,在您的情况下,我们需要定义“ x”和“ y”属性的限制。

所以只要更换

ValueAnimator translate = ValueAnimator.ofInt(viewX, endX, viewY, endY);




ValueAnimator translate = new ValueAnimator(); // Inititing ValueAnimator obj
translate.setValues(PropertyValuesHolder.ofInt("x",viewX,endX), // set the limits of property "x"
                        PropertyValuesHolder.ofInt("y", viewY,endY)); // setting the limits of property "y"


这样,我们可以在onAnimationUpdate方法中获取valueAnimator.getAnimatedValue("x") & valueAnimator.getAnimatedValue("y")

10-05 21:41