一、Android 實現兩個TextView跑馬燈效果
阿新 • • 發佈:2018-12-31
超長的文字在有限的佈局中,實現一行迴圈顯示?
如果是隻有一個TextView實現跑馬燈效果可以簡單使用以下方式來實現:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是一個Hello World!我是一個Hello World!我是一個Hello World!我是一個Hello World!"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
這樣簡單的實現就可以顯示跑馬燈效果。
但是在實際的開發中,頁面的佈局往往比較複雜,如果顯示兩個跑馬燈的文字,這種方法只能實現第一個,第二個不會出現效果。採用如下方法:
首先我們寫一個類,繼承TextView這個類,實現它的構造方法,重寫isFocused方法 ,將它的返回值都為true,
package com.example.administrator.marqueetextview; import android.content.Context; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.widget.TextView; /** * Created by Administrator on 2018/3/8 0008. */ public class Marquee_Textview extends TextView { public Marquee_Textview(Context context) { super(context); } public Marquee_Textview(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public Marquee_Textview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean isFocused(){ return true; } }
在頁面中將textView換成我們自己的TextView,兩個textview就都可以實現跑馬燈的效果了。
<com.example.administrator.marqueetextview.Marquee_Textview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是一個Hello World!我是一個Hello World!我是一個Hello World!我是一個Hello World!"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.example.administrator.marqueetextview.Marquee_Textview
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是一個Hello World!我是一個Hello World!我是一個Hello World!我是一個Hello World!"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
實現原理:兩個TextView,預設的是第一個獲取焦點,第二個預設的是沒有選中的。現在我們自己的TextView都是預設的強制的設定為被選中的狀態的。