如何制作可点击的动画文本视图?

时间:2018-09-10 09:00:27

标签: android viewpropertyanimator

我需要实现一个具有可点击范围的移动/滚动文本视图。我还需要使动画看起来像新闻下面不断重复的横幅广告。我之前在电视应用程序上使用过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的方法。有破解的方法吗?

1 个答案:

答案 0 :(得分:0)

尝试一下,希望它对您有用。

 lbl.animate();
 lbl.animate().x(-lblWidth).y(0);
 lbl.animate().setDuration(animDuration);
 lbl.animate().setInterpolator(new LinearInterpolator());
 lbl.animate().setRepeatCount(Animation.INFINITE);