闲来无事,今天写了个小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