Android系統中TextView實現跑馬燈效果,必須具備以下幾個條件:
xml:
android:singleLine="true" //單行顯示
android:ellipsize="marquee" //跑馬燈顯示(動畫橫向移動)
android:marqueeRepeatLimit="marquee_forever"//永久滾動
android:focusable="true" //控件是否能夠獲取焦點
android:focusableInTouchMode="true" //是否在觸摸模式下獲得焦點
當我們需要多個TextView實現跑馬燈效果時,上面的方法就不管用了,因為它獲取不到焦點了。所以就需要自定義一個TextView,繼承TextView,並且重寫isFocuse()方法,讓它永遠返回true,這樣跑馬燈效果就能一直的跑起來了。
package com.example.music.marquee; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; /** * Created by xch on 2016/10/25. */
public class MarqueeTextView extends TextView { public MarqueeTextView(Context context) { super(context); } public MarqueeTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean isFocused() { return true; } }
接下來布局文件中使用自定義的TextView就好。具體寫法就是:包名.自定義TextView
<com.example.music.marquee.MarqueeTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" />
補充:
1.android:ellipsize屬性:
android:ellipsize="start" 省略號在開頭
android:ellipsize="middle" 省略號在中間
android:ellipsize="end" 省略號在結尾
android:ellipsize="marquee" 跑馬燈顯示
2.在Android Studio中,TextView單行顯示:singleline語句已廢棄不推薦使用,可以替換為 maxLines="1",but我換了之后跑馬燈無法實現,下面來看看這兩個屬性的區別:
從字面意思理解,這兩個都是限制Text的行數。那么singleLine="true" 和maxLine="1" 都是限制為一行,but,maxLines 是在限制高度, singleLine 是強制不讓換行。從高度來講是一樣的,兩者肯定都顯示一行,但從換行的位置來講就有區別了,maxLines並不會改變其換行的位置,而singleLine則會。從這個角度講,singleLine的顯示會好一些,因為如果超過一行singleLine會在一行內顯示,后面加上"...",而maxlines="1" 則不會,它依然會在原來換行的位置換行,所以有時候一行不滿,但是卻不顯示剩下的部分。
網上查資料之后,可能是maxLine與ellipsize配合失效。對於這個問題,我這里顯示一行就暫時用singleLine="true"代替吧。
順便貼上網上的一些解決辦法參考:http://blog.csdn.net/itchenlin/article/details/50386396
http://blog.csdn.net/womengmengyan/article/details/52136054
http://blog.csdn.net/true100/article/details/43965311
http://blog.csdn.net/fengkuanghun/article/details/8351149
http://ck19860613.iteye.com/blog/1116858
