TextView实现跑马灯效果

时间:2023-01-02 14:49:21

网上有很多跑马灯的介绍,有很多跑马灯的代码。或许我的不是最好的,但是应该很容易明白的。

我们先来介绍一个跑马灯的代码

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:id="@+id/wisdom_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你必须非常努力,才能看起来毫不费劲!-Moon同学的励志语言"
android:textSize="24sp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:focusable="true"
/> <!--
android:ellipsize="start" 省略号在开头
android:ellipsize="middle" 省略号在中间
android:ellipsize="end" 省略号在结尾
android:ellipsize="marquee" 跑马灯显示
-->
<!--
android:singleLine="true" 内容只能显示在一行
android:focusableInTouchMode="true" 通过touch来获得focus
android:focusable="true" 是否可以获取焦点
-->
</LinearLayout>

当然如果是一个跑马灯的话,那么这个就完全可以了,但是在以后的开发中,布局会很复杂的,如果出现两个以上的跑马灯的话,那么重复上面的代码,那么是实现不了的,那么两个以上的应该要怎么做呢?

layout布局的代码如下

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <com.shxt.xkl.MaequeeText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="你必须非常努力,才能看起来毫不费劲,你必须非常努力,才能看起来毫不费劲." /> <com.shxt.xkl.MaequeeText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="你必须非常努力,才能看起来毫不费劲,你必须非常努力,才能看起来毫不费劲." /> </LinearLayout>

在新建一个TextView的子类

 public class MaequeeText extends TextView {

     public MaequeeText(Context context) {
super(context);
} // 重写所有的构造函数 Source==>Generate Constructors from Superclass
public MaequeeText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} public MaequeeText(Context context, AttributeSet attrs) {
super(context, attrs);
} @Override
public boolean isFocused() {
return true;
// 自定义设置让focusable为true
// 这个方法相当于在layout中
// android:focusable="true"
// android:focusableInTouchMode="true"
}
}

以上代码就能解决了今后多个跑马灯的问题了,希望对大家有帮助!

                                                                        ~Moon童鞋