摘要:
制作跑马灯多行展示控件
要点:
1、跑马灯效果属性
android:ellipsize="marquee" //跑马灯效果
android:focusable="true" //获取焦点
android:singleLine="true" //单行
2、多行展示,把单行跑马灯动态组合成一个控件
使用:
marqueeView = (MarqueeView) findViewById(R.id.margueeView);
Listlist = new ArrayList();
list.add("推送消息1--收银机切记进行退出操作,进行关机");
list.add("推送消息2--收银机切记进行退出操作,进行关机");
list.add("推送消息3--收银机切记进行退出操作,进行关机");
list.add("推送消息4--收银机切记进行退出操作,进行关机");
marqueeView.setContentList(list);
控件1:单行跑马灯
public class MarqueeTextView extends TextView {
/** 滚动次数 */
private int marqueeNum = -1;//-1为永久循环。大于0是循环次数。
public void setMarqueeNum(int marqueeNum) {
this.marqueeNum = marqueeNum;
}
public MarqueeTextView(Context context) {
super(context);
setAttr();
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setAttr();
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setAttr();
}
/**
* 始终获取焦点
*
* 跑马灯在TextView处于焦点状态的时候才会滚动
* @return
*/
@Override
public boolean isFocused() {
return true;
}
/**
* 设置相关属性
*/
private void setAttr(){
this.setEllipsize(TextUtils.TruncateAt.MARQUEE);//设置跑马等效果
this.setMarqueeRepeatLimit(marqueeNum);//设置跑马灯重复次数
this.setSingleLine(true);//设置单行
}
}
控件2:多行跑马灯
public class MarqueeView extends LinearLayout {
private Context context;
/**
* 走马灯多条内容设置
*
* @param contentList
*/
public void setContentList(ListcontentList) {
solveLayout(contentList);
}
public MarqueeView(Context context) {
super(context);
this.context = context;
setAttr();
}
public MarqueeView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
setAttr();
}
public MarqueeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
setAttr();
}
/**
* 默认设置为垂直布局
*/
public void setAttr(){
this.setOrientation(VERTICAL);
}
/**
* 解析内容list
* 添加child view
*
* @param strList
*/
private void solveLayout(ListstrList){
if(null != strList){
for(int i = 0; i < strList.size(); i++){
MarqueeTextView marqueeView = new MarqueeTextView(context);
marqueeView.setText(strList.get(i));
addView(marqueeView);
}
}
}
}