【问题标题】:Android ValueAnimator Sin waveAndroid ValueAnimator 仙波
【发布时间】:2015-08-05 10:42:25
【问题描述】:

我有一个自定义 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();
    }

【问题讨论】:

    标签: android translate-animation


    【解决方案1】:

    您在 onAnimationUpdate 中声明了一个浮点数 value 并且不再使用它。图像翻译的计算是mImage.setTranslationY((float) (amplitude * Math.sin((incrementalValue) * Math.PI)));。如果您插入这些值并且incrementalValue ( = 0) 没有改变,则此计算将始终返回 0,因为 sin(0) = 0 并且乘法中的一个 0 使乘积为 0。您应该为 @ 插入 animator.getAnimatedValue 987654327@。另外,我建议你把计算改成sin(animator.getAnimatedValue()*PI*2),这样正弦波的波长就变成了1,每重复一次动画,图像就会上下移动一次,并且在重新开始瞄准时不会跳跃。

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

    【讨论】:

    • 谢谢你,效果很好!我唯一改变的是 mImage.setTranslationX(value + incrementalValue);而不是 mImage.setTranslation(incrementalValue)。感谢您的时间和帮助!
    • 所以你想让图像横向和上下移动?顺便说一句,赞一个怎么样:D
    • 如果我在上面的评论中没有 setTranslationX 语句,图像会上下移动,但不会穿过屏幕。尽管它确实以正弦波模式移动。是的,你肯定会得到支持 :)
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2015-10-15
    • 1970-01-01
    • 2017-01-22
    • 2023-03-03
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多