要实现跑马灯还是比较简单的。
同时有几个需要注意的点,先上代码:
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 中午,佛山