0

我需要实现一个可点击范围的移动/滚动文本视图。我还需要让动画看起来像新闻下方那些不断重复的横幅广告。我之前将 TranslateAnimation 用于电视应用程序并且能够让它工作,因为我得到的是 keyEvent 和触摸。我现在需要在除了触摸屏本身之外没有任何外部输入源的平板电脑应用程序上实现它。

我尝试再次将 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 找到了一种方法。有没有办法做到这一点?

4

1 回答 1

0

试试这个,我希望它对你有用。

 lbl.animate();
 lbl.animate().x(-lblWidth).y(0);
 lbl.animate().setDuration(animDuration);
 lbl.animate().setInterpolator(new LinearInterpolator());
 lbl.animate().setRepeatCount(Animation.INFINITE);
于 2018-09-10T11:17:58.150 回答