如何在 TextView 中无限滚动长文本
How to scroll long text in TextView indefinitely
当文本太长时,我想无限期地为我的 TextView 设置动画。我找到了一些解决方案,但它会在 2 秒后重置回到文本的开头,即使仍然需要滚动一些文本。我需要无限的动画,它应该滚动整个文本,最后会出现文本的开头。
就像火车站的那些信息板一样。
这是我现在的动画:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="100"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="infinite"
android:toXDelta="-100" />
有重复计数,但我不想重复动画并重置到初始位置,而是一直动画。
您不需要动画,一个简单的 Marquee TextView 即可:
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="Your Sample text here" />
确保您设置了选取框模式(在上述 ellipsize
属性中)并将最大行数设置为 1 以使其正常工作。您可以通过将 marquee_forever
替换为整数来选择无限期或特定次数地重复它。
如果您需要停止重复模式并在初始点设置视图,那么您可以将计数设置为-1。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="100"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="-1"
android:toXDelta="-100" />
如果需要,您可以将repeatmode
设置为Animation.REVERSE
。
需要动态做的可以用下面的方式
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);
你可以试试这个:
<TextView
android:id="@+id/rv_item_tv_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="address"
android:textColor="@color/colorPrimary"
android:textSize="20sp"
/>
当文本太长时,我想无限期地为我的 TextView 设置动画。我找到了一些解决方案,但它会在 2 秒后重置回到文本的开头,即使仍然需要滚动一些文本。我需要无限的动画,它应该滚动整个文本,最后会出现文本的开头。 就像火车站的那些信息板一样。
这是我现在的动画:
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="100"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="infinite"
android:toXDelta="-100" />
有重复计数,但我不想重复动画并重置到初始位置,而是一直动画。
您不需要动画,一个简单的 Marquee TextView 即可:
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="Your Sample text here" />
确保您设置了选取框模式(在上述 ellipsize
属性中)并将最大行数设置为 1 以使其正常工作。您可以通过将 marquee_forever
替换为整数来选择无限期或特定次数地重复它。
如果您需要停止重复模式并在初始点设置视图,那么您可以将计数设置为-1。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="100"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="-1"
android:toXDelta="-100" />
如果需要,您可以将repeatmode
设置为Animation.REVERSE
。
需要动态做的可以用下面的方式
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);
你可以试试这个:
<TextView
android:id="@+id/rv_item_tv_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="address"
android:textColor="@color/colorPrimary"
android:textSize="20sp"
/>