Textview的文字滚动,跑马灯效果的实现

在网上看到各种文字滚动的实现的代码,有些没交代具体使用背景,所以当使用场景不同时,效果可能却出不来。比如说,textview可能因为多级ViewGroup(如LinearLayout, RelativeL)的嵌套而无法实现滚动效果。为了搞清不同情况下如何使用的达到效果,自己做了一个demo。

下面开始做对TextView做各种实验。
实验1,从最基本地开始,布局只有一个RelativeLayout嵌套一个TextView,xml文件activity_main1如下:
< RelativeLayout 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:paddingBottom= "@dimen/activity_vertical_margin"
    android:paddingLeft= "@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    tools:context= ".MainActivity" >
     < TextView
        android:layout_width ="wrap_content"
        android:layout_height ="wrap_content"
        android:focusable ="true"
        android:focusableInTouchMode ="true"
        android:marqueeRepeatLimit ="marquee_forever"
        android:ellipsize ="marquee"
        android:singleLine ="true"
        android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
</ RelativeLayout >  
该文件下textview的字体可实现滚动效果。

继续做一组实验2,再添加一个TextView,xml文件activity_main2.xml如下:
< RelativeLayout 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:paddingBottom= "@dimen/activity_vertical_margin"
    android:paddingLeft= "@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    tools:context= ".MainActivity" >

    <TextView
        android:id ="@+id/test"
        android:layout_width ="wrap_content"
        android:layout_height ="wrap_content"
        android:focusable ="true"
        android:focusableInTouchMode ="true"
        android:marqueeRepeatLimit ="marquee_forever"
        android:ellipsize ="marquee"
        android:singleLine ="true"
        android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />

    <TextView
        android:id ="@+id/another"
        android:layout_below ="@id/test"
        android:layout_width ="wrap_content"
        android:layout_height ="wrap_content"
        android:focusable ="true"
        android:focusableInTouchMode ="true"
        android:marqueeRepeatLimit ="marquee_forever"
        android:ellipsize ="marquee"
        android:singleLine ="true"
        android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
   
   
</ RelativeLayout>

实验发现上方第一个textview可以滚动,第二个textview不能滚动。所以我们可以推断第一个textview抢走了焦点,致使第二个textview的字体不能实现滚动效果。

继续做实验3,将textview嵌入一级LinearLayout,xml文件activity_main3如下:

< RelativeLayout 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:paddingBottom= "@dimen/activity_vertical_margin"
    android:paddingLeft= "@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    tools:context= ".MainActivity" >
 
    <LinearLayout
        android:id ="@+id/first_layout"
        android:layout_width ="match_parent"
        android:layout_height ="wrap_content"
        android:orientation ="vertical"
        >
       <TextView
            android:layout_width ="wrap_content"
            android:layout_height ="wrap_content"
            android:focusable ="true"
            android:focusableInTouchMode ="true"
            android:marqueeRepeatLimit ="marquee_forever"
            android:ellipsize ="marquee"
            android:singleLine ="true"
            android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
              
    </LinearLayout >
   
</ RelativeLayout>

实验结果发现Textview能正常滚动,这也说明textview的滚动效果并不受Linearlayout的嵌套影响。

对实验3进行改动做实验4,xml文件activity_main4如下:
< RelativeLayout 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:paddingBottom= "@dimen/activity_vertical_margin"
    android:paddingLeft= "@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    tools:context= ".MainActivity" >
 
    <TextView
        android:id ="@+id/test"
        android:layout_width ="wrap_content"
        android:layout_height ="wrap_content"
        android:focusable ="true"
        android:focusableInTouchMode ="true"
        android:marqueeRepeatLimit ="marquee_forever"
        android:ellipsize ="marquee"
        android:singleLine ="true"
        android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
          
   
    <LinearLayout
        android:id ="@+id/first_layout"
        android:layout_width ="match_parent"
        android:layout_height ="wrap_content"
        android:layout_marginTop ="20.0dp"
        android:addStatesFromChildren ="true"
        android:orientation ="vertical"
        >
       <TextView
            android:layout_width ="wrap_content"
            android:layout_height ="wrap_content"
            android:focusable ="true"
            android:focusableInTouchMode ="true"
            android:marqueeRepeatLimit ="marquee_forever"
            android:ellipsize ="marquee"
            android:singleLine ="true"
            android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
              
    </LinearLayout >
   
</ RelativeLayout>

实验结果发现上方的第一个textview能实现滚动效果,而下方的textview没有滚动效果。如果你还注意到的话,我还对textview嵌套所在的LinearLayout添加了addStateFromChildren="true"属性,这也是网上传的方法,实际测试发现没有用。

借助实验3,实验4我们基本可以判断如果,在一个textview之前有同一级树或更高一级的textview在xml文件里设置了滚动属性后,再对该textview在xml里设置滚动属性则不起作用。

那么面对这种怎么办呢,使出杀手锏了。

接着再做实验5,xml文件activity_main5如下:
< RelativeLayout 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:paddingBottom= "@dimen/activity_vertical_margin"
    android:paddingLeft= "@dimen/activity_horizontal_margin"
    android:paddingRight= "@dimen/activity_horizontal_margin"
    android:paddingTop= "@dimen/activity_vertical_margin"
    tools:context= ".MainActivity" >
 
    <TextView
        android:id ="@+id/test"
        android:layout_width ="wrap_content"
        android:layout_height ="wrap_content"
        android:focusable ="true"
        android:focusableInTouchMode ="true"
        android:marqueeRepeatLimit ="marquee_forever"
        android:ellipsize ="marquee"
        android:singleLine ="true"
        android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
          
   
    <LinearLayout
        android:id ="@+id/first_layout"
        android:layout_width ="match_parent"
        android:layout_height ="wrap_content"
        android:layout_marginTop ="20.0dp"
        android:addStatesFromChildren ="true"
        android:orientation ="vertical"
        >
       <TextView
            android:id ="@+id/inside"
            android:layout_width ="wrap_content"
            android:layout_height ="wrap_content"
            android:marqueeRepeatLimit ="marquee_forever"
            android:ellipsize ="marquee"
            android:singleLine ="true"
            android:text ="那么什么是成功的人生,什么样的人又是成功人士呢?像科技界的比尔?盖茨 ,乔布斯 ,商界的巴菲特以及娱乐、体育界的大腕,无疑会被人们视为是成功者。但对于普通民众,如果用比尔?盖茨那样的标准来衡量是否成功似乎有些太苛刻,也不现实。在某种观念中,一个人的成功似乎与财富分不开的。很多国人到美国看到华人最常说的一句话是,你是个成功人士。为什么这么说?因为你能住300平方米、价值百万美元的房子,因为你开的车是奔驰 、宝马等豪华车,因为你有好的工作,年薪至少在10万美元以上。这也许是很多国人看待一个人成功与否的主要标志。但在美国人眼里,成功并不是与拥有众多财富密不可分。在1980年代,多数美国人把拥有更多财富看成人生成功的一个主要标志。而在一项最新的调查中,对于美国人来说,财富不再是成功的最重要组成部分。调查中22个成功人生的潜在组成因素中,“有很多钱”仅排名在第20位。" />
              
    </LinearLayout >
   
</ RelativeLayout>

然后在代码中对TextView inside 进行设置inside.setSelected(true),就能实现textview滚动效果了,此方法对任何情况下的textview都适用。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值