我需要实现一个具有可点击范围的移动/滚动文本视图。我还需要使动画看起来像新闻下面不断重复的横幅广告。我之前在电视应用程序上使用过TranslateAnimation并能够使其工作,因为我得到的是keyEvent和touch。我现在需要在平板电脑应用程序上实现它,除了触摸屏本身,该应用程序没有任何外部输入源。
我尝试再次在平板电脑应用中使用TranslateAnimation,但是它不起作用。在搜索了我可以使用的不同动画之后,我了解到TranslateAnimation只是对视图的外观和整个视图本身进行了动画处理。它不会随着外观移动可点击的部分,所以我寻找了另一个。
然后我偶然发现了PropertyAnimator。这正是我显然需要解决的问题。但是它也有一个缺点。它不支持重复。
我现在拥有的是下面的这段代码。
lbl.animate();
lbl.animate().x(-lblWidth).y(0);
lbl.animate().setDuration(animDuration);
lbl.animate().setInterpolator(new LinearInterpolator());
lbl.animate().setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
lbl.animate();
lbl.animate().x(lblWidth).y(0);
lbl.animate().setDuration(0);
lbl.animate().x(-lblWidth).y(0);
lbl.animate().setDuration(animDuration);
lbl.animate().setInterpolator(new LinearInterpolator());
lbl.animate().setListener(this);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
第一次运行后,动画结束。因为它打印了我的日志,但没有在屏幕上显示,因此重复。
我试图用该代码产生重复效果。我试图在下面重新创建类似以下代码的内容。
transAnim = new TranslateAnimation(
TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
TranslateAnimation.RELATIVE_TO_SELF, -1.0f,
TranslateAnimation.ABSOLUTE, 0f,
TranslateAnimation.ABSOLUTE, 0f
);
transAnim.setRepeatCount(-1);
transAnim.setRepeatMode(Animation.RESTART);
transAnim.setInterpolator(new LinearInterpolator());
transAnim.setDuration(animDuration);
transAnim.setFillAfter(true);
上面的代码是从屏幕外部的右侧开始,我启动一个向屏幕外部的左侧移动的动画。然后,如果视图的末端到达屏幕外部的左侧,请告诉动画从头开始重新播放。
我现在通过在所有内容之上添加一小段代码来使其工作。
lbl.setX(screenWidth);
lbl.animate().x(-lblWidth).y(0);
lbl.animate().setDuration(animDuration);
lbl.animate().setInterpolator(new LinearInterpolator());
然后在动画监听器的onAnimationEnd上再次使用这些代码行。现在我想到了另一件事,可以暂停此动画吗?因为我找到了一种针对TranslateAnimation的方法。有破解的方法吗?
答案 0 :(得分:0)
尝试一下,希望它对您有用。
lbl.animate();
lbl.animate().x(-lblWidth).y(0);
lbl.animate().setDuration(animDuration);
lbl.animate().setInterpolator(new LinearInterpolator());
lbl.animate().setRepeatCount(Animation.INFINITE);