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都適用。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章