当前位置: 首页 > 工具软件 > MarqueeView > 使用案例 >

android:ellipsize = "marquee" 跑马灯,Android View MarqueeView 跑马灯效果

苏丰茂
2023-12-01

摘要:

制作跑马灯多行展示控件

要点:

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);

}

}

}

}

 类似资料: