如何在android中使用翻译动画连续上下移动图像?

时间:2011-09-02 09:01:47

标签: android animation

我使用Translate Animation成功完成了一侧动画,意味着图像从顶部到底部。这是代码:

private ImageView mScanner;
private Animation mAnimation;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mScanner = (ImageView)findViewById(R.id.Scanner);

    mAnimation = new TranslateAnimation(0, 0, 0, 500);
    mAnimation.setDuration(10000);
    mAnimation.setFillAfter(true);
    mAnimation.setRepeatCount(-1);
    mAnimation.setRepeatMode(Animation.REVERSE);
    mScanner.setAnimation(mAnimation);
    mScanner.setVisibility(View.VISIBLE);
}

现在我希望当图像到达屏幕底部时,它应该开始移回到顶部。我怎么能这样做?

注意:完成反向模式。请参阅代码。但现在的问题是,它从底部移动到顶部时会留下线条。像附图一样。如何删除这一行? screenshot

5 个答案:

答案 0 :(得分:43)

根据此修改您的代码:

   mScanner.setVisibility(View.VISIBLE);
   mAnimation = new TranslateAnimation(
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 1.0f);
   mAnimation.setDuration(10000);
   mAnimation.setRepeatCount(-1);
   mAnimation.setRepeatMode(Animation.REVERSE);
   mAnimation.setInterpolator(new LinearInterpolator());
   mScanner.setAnimation(mAnimation);

而且使用xml而不是image。请参阅以下代码并将其放入ImageView src。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <solid android:color="#0000FF"/>
    <size android:width="480dp"
        android:height="10dp"/>
    <corners android:radius="1dp"/>
    <stroke android:width="3dp"
        android:color="#000000"/>
</shape>

我希望它会对你有所帮助。

答案 1 :(得分:7)

您需要设置重复属性

机器人:REPEATMODE

int值。动画到达动画结尾时的行为方式。 android:repeatCount必须设置为正整数或“-1”才能使此属性生效。设置为“反向”以在每次迭代时使动画反向,或者“重复”以使动画循环从每次开始。

Animation a;
a.setRepeatMode(Animation.REVERSE);

答案 2 :(得分:2)

我认为您必须删除mAnimation.setFillAfter(true);,因为这意味着它会永久停留在停止的位置。

为了返回到初始位置,你可以为上下移动制作一个完整的动画集,或者在第一次完成时制作两个单独的,然后在第一个完成时开始,然后开始第二个,尽管没有理由遵循这样的一种方法。

答案 3 :(得分:0)

这对于连续上下移动图像效果更好。

TranslateAnimation mAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.RELATIVE_TO_PARENT, -1f, TranslateAnimation.RELATIVE_TO_PARENT, 1.0f);
                        mAnimation.setDuration(10000);
                        mAnimation.setRepeatCount(-1);
                        mAnimation.setRepeatMode(Animation.INFINITE);
                        mAnimation.setInterpolator(new LinearInterpolator());
imgeview.setAnimation(mAnimation);

答案 4 :(得分:0)

首先,像这样定义一个 anim XML 文件:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="800"
        android:fromYDelta="0%p"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:toYDelta="2%p" />
</set>

其次,使用 Kotlin 应用它:

val anim = AnimationUtils.loadAnimation(
            requireContext(),
            R.anim.anim
        )


        binding.yourView.animation = anim