Android View MarqueeView 跑马灯效果

摘要:

制作跑马灯多行展示控件


要点:

1、跑马灯效果属性

android:ellipsize="marquee" //跑马灯效果
android:focusable="true"     //获取焦点
android:singleLine="true"    //单行

2、多行展示,把单行跑马灯动态组合成一个控件


使用:


marqueeView = (MarqueeView) findViewById(R.id.margueeView);
List list = 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(List contentList) {
        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(List strList){
        if(null != strList){
            for(int i = 0; i < strList.size(); i++){
                MarqueeTextView marqueeView = new MarqueeTextView(context);
                marqueeView.setText(strList.get(i));
                addView(marqueeView);
            }
        }
    }
}



你可能感兴趣的:(Android)