1. 程式人生 > >一、Android 實現兩個TextView跑馬燈效果

一、Android 實現兩個TextView跑馬燈效果

超長的文字在有限的佈局中,實現一行迴圈顯示?

如果是隻有一個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都是預設的強制的設定為被選中的狀態的。