自定义view实现事件执行进度逐条展示

博主写了个实现事件当前进度展示功能的小demo,支持横纵向设置。介绍了使用方法,需在项目中引入mylibrary模块,还说明了在布局文件和activity中的使用。主要代码是装有水平和垂直listview实现展示,自定义view可实现线条和圆圈的隐藏、颜色设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲来无事,今天写了个小demo,实现了事件当前进度展示的功能,支持设置横向和纵向,大致先这样,以后用到的话直接引入,也可以修改一下在使用,权当记录一下了,希望大家批评指正。先上图吧,如下:

RateDemo在下边,自行下载吧,使用方法:

1、下载demo,在你的项目中引入demo中的module:mylibrary

2、布局文件中使用:

 <com.mylibrary.RateShowView
        android:id="@+id/rsv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </com.mylibrary.RateShowView>

 3、activity中使用:

 mRateView = (RateShowView) findViewById(R.id.rsv);

 List<MED> list = new ArrayList<>();
        
//主要是就是这一行代码  设置横竖方向和添加数据
 mRateView.setDirectionAndData(RateShowView.RATE_HORIZONTAL, list);


//你自己的entity,but,需要继承SCHEDULE这个类 
 public class MED extends SCHEDULE {

        
    }

主要代码:

public class RateShowView<T extends SCHEDULE> extends FrameLayout {

    public static final int RATE_VERTICAL = 10001;
    public static final int RATE_HORIZONTAL = 10002;

    private int RATE_TYPE = RATE_VERTICAL;

    private ListView vListView;
    private HListView hListView;
    List<T> mDatas = new ArrayList<>();
    private RateAdapterAdapter<T> mRateAdapterAdapter;

    public RateShowView(Context context) {
        super(context);
    }

    public RateShowView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public RateShowView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setDirectionAndData(int RATE_TYPE, List<T> mDatas) {
        this.RATE_TYPE = RATE_TYPE;
        this.mDatas = mDatas;
        if (mRateAdapterAdapter == null) {
            mRateAdapterAdapter = new RateAdapterAdapter<T>(getContext(), this.mDatas, this.RATE_TYPE);
        }
        if (this.RATE_TYPE == RATE_VERTICAL) {
            vListView.setVisibility(VISIBLE);
            hListView.setVisibility(GONE);
            vListView.setAdapter(mRateAdapterAdapter);
        } else if (this.RATE_TYPE == RATE_HORIZONTAL) {
            vListView.setVisibility(GONE);
            hListView.setVisibility(VISIBLE);
            hListView.setAdapter(mRateAdapterAdapter);
        }
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        init();
    }

    private void init() {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.rate_show_view, null);
        hListView = (HListView) view.findViewById(R.id.rate_hListView);
        vListView = (ListView) view.findViewById(R.id.rate_vListView);
        this.addView(view);
    }

其实就是一个装了水平和垂直的listview,分别实现了横竖向的展示功能

public class RateView extends LinearLayout {

    private CheckedTextView mTop;
    private CheckedTextView mMid;
    private CheckedTextView mBottom;
    private LayoutParams params;

    public RateView(Context context) {
        super(context);
    }

    public RateView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public RateView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        init();
    }

    private void init() {
        mTop = (CheckedTextView) findViewById(R.id.top_view);
        mMid = (CheckedTextView) findViewById(R.id.mid_view);
        mBottom = (CheckedTextView) findViewById(R.id.bottom_view);
        params = (LayoutParams) mMid.getLayoutParams();
    }


    public void setInVisibleTop(boolean is) {
        if (is) {
            mTop.setVisibility(View.INVISIBLE);
        } else {
            mTop.setVisibility(View.VISIBLE);
        }

    }

    public void setInVisibleBottom(boolean is) {
        if (is) {
            mBottom.setVisibility(View.INVISIBLE);
        } else {
            mBottom.setVisibility(View.VISIBLE);
        }

    }

    public void setIsChecked(boolean is) {
        mTop.setChecked(is);
        mMid.setChecked(is);
        mBottom.setChecked(is);

        if (is) {
            params.width = Utils.dip2px(getContext(),30);
            params.height = Utils.dip2px(getContext(),30);
            mMid.setLayoutParams(params);
        } else {
            params.width = Utils.dip2px(getContext(),20);
            params.height = Utils.dip2px(getContext(),20);
            mMid.setLayoutParams(params);
        }
    }

上边就是listvew的每个item的自定义view,实现了线条和圆圈的隐藏、设置颜色等功能

很简单的一个demo,希望能帮到大家,大家也可以自行修改实现自己的功能,

下载地址RateDemo​​​​​​​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值