TextView实现跑马灯效果

这里是实现TextView的跑马灯效果分为两个

  • 单个TextView实现
  • 多个TextView实现

单个TextView实现

 <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:text="@string/text_view"
        android:textSize="20sp"
        android:singleLine="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        />

这样单个的跑马灯效果就出现了

另外如果在EditText的父级控件中找一个,设置成
android:focusable="true"
android:focusableInTouchMode="true"
就可以让EditText不自动获取焦点

多个TextView实现

首先我们要自定义一TextView的子类,我取名叫Text,然后实现三个构造函数,最后要重载一个isFocused()的方法,这样做的目的是可以让多个TextView同时获得焦点(默认情况,有两个TextView时,一个获得焦点后另一个就无法获得焦点了),代码如下:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;


public class Text extends TextView {
    public Text(Context context) {
        super(context);
    }

    public Text(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public Text(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

做好以上的准备,还需要在xml文件做一件事,那就将TextView用我们自定义的控件,方法是包名+类名,代码如下:

 <com.example.ztt.newbloglx.Text
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:text="@string/text_view"
        android:textSize="20sp"
        android:singleLine="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        />

    <com.example.ztt.newbloglx.Text
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        android:text="@string/text_view"
        android:textSize="20sp"
        android:singleLine="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        />

这样TextView的简单跑马灯就解决了