Android ValueAnimator Sin wave

时间:2014-09-01 19:54:51

标签: android translate-animation

我有一个Custom ViewGroup类和我添加到它的图像。当点击屏幕时,我想要为添加的图像设置动画,以便以波状图案穿过屏幕。我现在所拥有的是下面但是虽然图像以波状图案移动但它跳得太快而且模糊不清。如何减慢它以稳定波动?

    ValueAnimator animator = ValueAnimator.ofFloat(0, 1); // values from 0 to 1
    if(animateImage) {
        incrementalValue = 0f;
        animator.setDuration(4000);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = ((Float) (animation.getAnimatedValue()))
                        .floatValue();
                float amplitude = 100f;
                mImage.setTranslationX(incrementalValue);
                mImage.setTranslationY((float) (amplitude * Math.sin((incrementalValue) * Math.PI)));
                 incrementalValue += 5f;
            }
        });
        animator.setTarget(mImage);
        animator.start();
    }

1 个答案:

答案 0 :(得分:2)

您在value中声明了一个浮动onAnimationUpdate,并且再也不会使用它。图像转换的计算是mImage.setTranslationY((float) (amplitude * Math.sin((incrementalValue) * Math.PI)));。如果插入值并且incrementalValue(= 0)没有改变,则此计算将始终返回0,因为sin(0)= 0并且乘法中的一个0使得乘积为0.您应该插入{ {1}} animator.getAnimatedValue。此外,我建议你将计算更改为incrementalValue这使得正弦1 sin(x*pi*2)的波长和图像将在每次重复动画时上下移动一次,并且当它不会跳跃时动画重新开始。

注意您仍可以使用幅度乘以使图像移动一定距离。