Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用translate动画连续上下移动图像?_Android_Animation - Fatal编程技术网

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

如何在android中使用translate动画连续上下移动图像?,android,animation,Android,Animation,我已经成功地使用平移动画制作了单面动画表示图像从上到下。代码如下: private ImageView mScanner; private Animation mAnimation; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mScanner = (Imag

我已经成功地使用
平移动画制作了单面动画
表示图像从上到下。代码如下:

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);
}
现在我希望当图像到达屏幕底部时,它应该开始移回顶部。我该怎么做

注意:在反向模式下完成。请看代码。但现在的问题是,它在从下到上移动时会留下线条。喜欢附加的图像。如何删除此行?

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


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

您需要设置repeat属性

android:重复模式

int.动画到达动画末尾时的行为。android:repeatCount必须设置为正整数或“-1”才能使此属性生效。设置为“reverse”(反转)可使动画在每次迭代时反向,或设置为“repeat”(重复)可使动画在每次迭代开始时循环

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

根据以下内容修改代码:

   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而不是图像。请查看下面的代码并将其放入您的
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>


我希望它能对您有所帮助。

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

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

它可以工作,但在反向移动时留下一条线意味着从下到上。如何删除该行,使其看起来像正在扫描。我已经更新了我的代码并附上了图片。谢谢,我已经做了我想要的,但是现在我得到了一个新的问题,我已经附上了一张图片。我已经更新了我的问题。请看一看。谢谢你。我包含xml并删除
mAnimation.setFillAfter(true)行,它按照我的要求工作。谢谢你的帮助。@sandy我在2.1到4.2之间检查了这段代码,并且在我的所有设备中都能正常工作。请不要尝试使用图像,因为我对图像有问题,然后我使用基于
XML
的创建行替换项目中使用的图像。请检查您的代码并再试一次。ThanksIt显示了它应该显示的内容,但正如您所知,如果您在摄影机视图上使用它,它会对性能产生很大影响。例如,在Nexus3上,相机会有1秒的时间lag@KKO你需要注意表现。就我使用而言,我没有发现任何延迟。我不记得我确实做了什么,但我认为在我禁用硬件加速后,它开始平稳运行查看我的解决方案: