在android项目中我们常常会遇到类似游戏公告一样的通知推送。
当推送通知来的时候,出现一个半透明背景的textview,推送内容以跑马灯形式走过。
接下来就看看这个跑马灯textview。
友情提示:
这个跑马灯必须让内容超过一行显示的长度才会出现跑马灯效果,如果内容没有超出一行,则和普通textview一样。
跑马灯的需求是为了在textview一行内让用户看到所有的信息。
如果看博文的程序员是单纯为了跑马灯的动画效果,那么还要自己去处理内容没有超出一行时的动画。
public class AlwaysMarqueeTextView extends TextView {
public AlwaysMarqueeTextView(Context context) {
super(context);
initView();
}
public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
private void initView() {
//跑马灯缺少以下两种任何一个属性都不行
setEllipsize(TextUtils.TruncateAt.MARQUEE);//超出文本的省略号显示方式,这里选择没有省略号
setSingleLine(true);//因为文字只能显示一行,在一行内实现跑马灯。所以设置属性单行模式
}
//跑马灯属性只有在获得焦点的情况下才有动画。
//所以,这里我们让这个textview自动获得焦点
@Override
public boolean isFocused() {
return true;
}
//还可以设置文本中的图片,类似通知跑马灯前的小喇叭图标
public void getLeftDrawable(Drawable leftDrawable) {
setCompoundDrawables(leftDrawable, null, null, null);
}
}
这样,跑马灯效果的textview就不会因为获取不到焦点而没有动画效果了。