当多个TextView要使用跑马灯的效果时需要注意的问题

当多个TextView要使用跑马灯的效果时需要注意的问题

问题的原因:

<TextView
android:id="@+id/tv_marquee1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="我是最棒的,我是最棒的,我是最棒的,我是最棒的,我是最棒的,我是最棒的" />

当设置属性focusable/focusableInTouchMode这两个属性的时候,会出现抢夺焦点的情况,此时就会出项一个一个TextView在转动,另一个不动的情况.

解决的方法:

自定义一个MarqueeTextview控件继承自TextView,覆盖其中的isFocused()方法.

xml布局部分:

<com.keke.marqueetextviewdemo.MarqueeTextview
       android:id="@+id/tv_marquee1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:singleLine="true"
       android:ellipsize="marquee"
       android:focusable="true"
       android:focusableInTouchMode="true"
       android:text="我是最棒的,我是最棒的,我是最棒的,我是最棒的,我是最棒的,我是最棒的" />

代码部分:
package com.keke.marqueetextviewdemo;

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

public class MarqueeTextview extends TextView {

    public MarqueeTextview(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public MarqueeTextview(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    public MarqueeTextview(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean isFocused() {
        return true; //返回值为true,使得所有的TextView都能够获取到焦点.
    }

}

你可能感兴趣的:(当多个TextView要使用跑马灯的效果时需要注意的问题)