Android实现多行文字的跑马灯效果(Realizing multiple lines of MarqueeTextview in Android)

这是实现单行跑马灯的代码


"wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true"//实现单行,避免多出的内容折行显示。
    android:ellipsize="marquee"//跑马灯效果的声明
    android:focusable="true"//焦点获取第一步
    android:focusableInTouchMode="true"//焦点获取第二步
    android:text="@string/hello_world"/>

在你的布局里多次复制该代码是无法实现多行文字共同滚动的效果的,简单复制后显示出的效果是:第一行有跑马灯效果,其他行没有。出现这样的情况与Android的焦点获取机制有关,想要获得多行文字跑马灯效果需要用别的办法。


不多bb,我们继承TextView类,再写一个类。

public class MarqueeText extends TextView{

    public MarqueeText(Context context){
    super(context);
    }

    public MarqueeText(Context context, AttributeSet attrs, int defStyle){
    super(context, attrs, defStyle);
    }

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

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

}

在这个TexitView的子类中,关键的函数是isFocused()方法,它使得MarqueeText相较于原本的TextView多出允许多组件被聚焦的特性。


调用重写的TextView的时候注意格式

<你的包名.MarqueeText
    ...
    .../>


这样就可以实现多行文字的跑马灯效果了。

你可能感兴趣的:(Android)