我使用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);
}
现在我希望当图像到达屏幕底部时,它应该开始移回到顶部。我怎么能这样做?
注意:完成反向模式。请参阅代码。但现在的问题是,它从底部移动到顶部时会留下线条。像附图一样。如何删除这一行?
答案 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