[android]从左到右的连续动画文本

标签: Java Android
发布时间: 2017/3/19 14:08:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图创建 animation 的移动 TextView 从左到右和无限循环。这是 TextView 我想要进行动画处理︰

<TextView
    android:id="@+id/txtTitle"
    android:layout_width="280dp"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:textStyle="italic"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="20dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/cardView" />

这如何进行动画处理 TextView :

Animation animation = new TranslateAnimation(0, -280, 0, 0);
animation.setDuration(9000);
animation.setRepeatMode(Animation.RELATIVE_TO_SELF);
animation.setRepeatCount(Animation.INFINITE);
textView.setAnimation(animation);

想要实现什么是文本在屏幕的中心开始时,移动到右,一旦第一封信离开它应该出现在屏幕的另一边。

解决方法 1:

你想要做什么可以轻易的实现与一个简单的 ValueAnimator

你首先要做把两个相同版本的 TextView 要进行动画处理成你 layout 。在这个例子中我 layout 看上去像这样︰

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/first"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="32sp"
        android:text="@string/hello_word"/>

    <TextView
        android:id="@+id/second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="32sp"
        android:text="@string/hello_word"/>

</FrameLayout>

然后-正如我已经提到了-你使用 ValueAnimator 进行动画处理的 translationX property 两者的 Views ,但抵消一个由屏幕的宽度 (因为 TextViews 以上使用 match_parent 宽度作为他们的宽度等于屏幕的宽度,这就是我将会使用以抵消其中一人的位置)。您的代码应类似于︰

final TextView first = (TextView) findViewById(R.id.first);
final TextView second = (TextView) findViewById(R.id.second);

final ValueAnimator animator = ValueAnimator.ofFloat(0.0f, 1.0f);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setInterpolator(new LinearInterpolator());
animator.setDuration(9000L);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        final float progress = (float) animation.getAnimatedValue();
        final float width = first.getWidth();
        final float translationX = width * progress;
        first.setTranslationX(translationX);
        second.setTranslationX(translationX - width);
    }
});
animator.start();

结果应该看起来像这样︰

looing text demo

官方微信
官方QQ群
31647020