要實現跑馬燈還是比較簡單的。
同時有幾個需要注意的點,先上代碼:
1 public class MTView extends TextView { 2 3 4 public MTView(Context context) { 5 super(context); 6 } 7 8 public MTView(Context context, AttributeSet attrs) { 9 super(context, attrs); 10 } 11 12 public MTView(Context context, AttributeSet attrs, int defStyleAttr) { 13 super(context, attrs, defStyleAttr); 14 } 15 16 public MTView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 17 super(context, attrs, defStyleAttr); 18 } 19 20 @Override 21 public boolean isFocused() { 22 return true; 23 } 24 }
1 <me.fwl.MTView 2 android:layout_width="120dp" 3 android:layout_height="20dp" 4 android:layout_centerInParent="true" 5 android:ellipsize="marquee" 6 android:gravity="center_vertical" 7 android:singleLine="true" 8 android:marqueeRepeatLimit="marquee_forever" 9 android:text="Android中重寫TextView實現 跑馬燈 最簡單的方法" />
需要注意的是:
1,ellipsize,這個屬性表示文本過長的時候怎么處理?
可選的屬性有如下幾個:start表示截取一部分顯示,省略號在開頭;middle表示截取頭尾,中間用省略號;end表示取前面這一段,省略號在后面;marquee表示跑馬燈的滾動效果,不截取,一直滾動;none 表示不做任何處理,也就是截取前面一段,和end的區別是,end后面以省略號結尾,而none直接截斷。
2,singleLine ,這個屬性是必須要設置的。如果可以多行的,你怎么跑?用腳指頭都可以想明白。
3,marqueeRepeatLimit,表示重復的次數,可以直接傳一個int的值。傳入marquee_forever 和 -1 表示無限次循環。
4,要獲取焦點,這里采取的是,重寫TextView的isFocus() 方法來控制其焦點,xml也可以設置獲取焦點,但你不能保證被其他人搶走啊,所以,要重寫。
--------------------------------------------升級---------------升級---------------升級---------------升級---------------升級---------------------------------------------------------------
這段時間,朋友遇到一個需求,就是在此基礎上,要增加圖標,也就是不是簡單的文字滾動,前面還帶個圖標,而且是多條數據
上代碼
String source = "<span><img src=\"icon_more_up.png\"><span>1文字這五年,張三這樣談文化遺產保護</span><img src=\"icon_more_up.png\"><span>2文字這五年,李四這樣談文化遺產保護</span></span>"; marqueue = view.findViewById(R.id.marqueue); marqueue.setText(Html.fromHtml(source, new Html.ImageGetter() { @Override public Drawable getDrawable(String s) { int imgid = R.drawable.icon_more_down; if (s.equals("icon_more_up.png")) { imgid = R.drawable.icon_more_up; } Drawable drawable = ReportFragment.this.getActivity().getResources().getDrawable(imgid); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } }, null));
這個也很簡單嘛,就這樣
更新於:2017-9-16 中午,佛山