TextView实现跑马灯效果

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

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

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical">
 5 
 6       <TextView
 7         android:id="@+id/wisdom_tv"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="你必须非常努力,才能看起来毫不费劲!-Moon同学的励志语言"
11         android:textSize="24sp"
12         android:singleLine="true"
13         android:ellipsize="marquee"
14         android:focusableInTouchMode="true" 
15         android:focusable="true"/>
16       
17         <!--  
18           android:ellipsize="start" 省略号在开头
19           android:ellipsize="middle" 省略号在中间
20           android:ellipsize="end" 省略号在结尾
21           android:ellipsize="marquee" 跑马灯显示
22         -->
23         <!-- 
24              android:singleLine="true" 内容只能显示在一行
25              android:focusableInTouchMode="true" 通过touch来获得focus
26              android:focusable="true" 是否可以获取焦点
27          -->
28 </LinearLayout>

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

layout布局的代码如下

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <com.shxt.xkl.MaequeeText
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:ellipsize="marquee"
11         android:focusable="true"
12         android:focusableInTouchMode="true"
13         android:singleLine="true"
14         android:text="你必须非常努力,才能看起来毫不费劲,你必须非常努力,才能看起来毫不费劲." />
15 
16     <com.shxt.xkl.MaequeeText
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:ellipsize="marquee"
20         android:focusable="true"
21         android:focusableInTouchMode="true"
22         android:singleLine="true"
23         android:text="你必须非常努力,才能看起来毫不费劲,你必须非常努力,才能看起来毫不费劲." />
24 
25 </LinearLayout>

在新建一个TextView的子类

 1 public class MaequeeText extends TextView {
 2 
 3     public MaequeeText(Context context) {
 4         super(context);
 5     }
 6 
 7 //    重写所有的构造函数    Source==>Generate Constructors from Superclass
 8     public MaequeeText(Context context, AttributeSet attrs, int defStyle) {
 9         super(context, attrs, defStyle);
10     }
11 
12     public MaequeeText(Context context, AttributeSet attrs) {
13         super(context, attrs);
14     }
15 
16     @Override
17     public boolean isFocused() {
18         return true;
19 //        自定义设置让focusable为true
20 //        这个方法相当于在layout中
21 //        android:focusable="true"
22 //        android:focusableInTouchMode="true"
23     }
24 }

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

                                                                        ~Moon童鞋

posted @ 2016-01-01 21:29  Mr.Moon  阅读(3582)  评论(0编辑  收藏  举报