码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-26 11:39:55      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:android   ui   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都适用。



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

标签:android   ui   textview   跑马灯   

原文地址:http://blog.csdn.net/a2758963/article/details/38844345

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!