文字描述不是很清楚,请看下图:
刚开始的逻辑都是直接在多类型布局里面转圈,但是后来发现多类型布局就算是加上去了3天前的这个布局,item里面添加隐藏显示布局,也会有侧滑这个东东,重点是使用了这个继承SwipeMenuAdapter,所有的item都有侧滑的,所以只能放弃,转战其它方向,后来想着好像一个recyclerview 套用两个recyclerview和一个标题也能实现,但是觉得太麻烦了,只能去想分割线看看能否实现,先随便网上找了一个自定义的分割线,把文字绘制了上去,发现真的行。
效果图如下:
数据就不用在意了,是测试数据来的。下面是使用方法和自定义的分割线:
swipeMenuRecyclerView.addItemDecoration(new CustomDecoration(this, CustomDecoration.VERTICAL_LIST, R.drawable.divider_love, DensityUtil.dip2px(this, 15)));
public class CustomDecoration extends RecyclerView.ItemDecoration {
public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
private Drawable mDivider;
private int mOrientation;
/**
* 分割线缩进值
*/
private int inset;
private Paint paint;
private Paint backPaint;
private String promptLunguage;
/**
* @param context
* @param orientation layout的方向
* @param drawable 引入的drawable的ID
* @param inset 分割线缩进值
*/
public CustomDecoration(Context context, int orientation, int drawable, int inset) {
mDivider = context.getResources().getDrawable(drawable);
promptLunguage = context.getResources().getString(R.string.apply_three_day_ago);
this.inset = inset;
paint = new Paint();
paint.setColor(context.getResources().getColor(R.color.color_a5a5a5));
//设置画笔宽度
paint.setStrokeWidth(5);
paint.setTextSize(40);
backPaint = new Paint();
backPaint.setColor(context.getResources().getColor(R.color.color_f3f3f3));
setOrientation(orientation);
}
public void setOrientation(int orientation) {
if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
throw new IllegalArgumentException("invalid orientation");
}
mOrientation = orientation;
}
@Override
public void onDraw(Canvas c, RecyclerView parent) {
if (mOrientation == VERTICAL_LIST) {
drawVertical(c, parent);
}
}
private void drawVertical(Canvas c, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
MenuAdapter adapter = (MenuAdapter) parent.getAdapter();
final int childCount = parent.getChildCount();
//最后一个item不画分割线
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
if (i == adapter.getThreeDayAgo()) {
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getTop() + child.getPaddingTop();
final int bottom = top + mDivider.getIntrinsicHeight();
c.drawRect(left, top- SizeUtils.dp2px(40), right, bottom, backPaint);
if (inset > 0) {
mDivider.setBounds(left, top- SizeUtils.dp2px(40), right, bottom);
} else {
mDivider.setBounds(left, top- SizeUtils.dp2px(40), right, bottom);
}
c.drawText(promptLunguage, left + inset, top - inset, paint);
mDivider.draw(c);
}
}
}
//由于Divider也有宽高,每一个Item需要向下或者向右偏移
@Override
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
if (mOrientation == VERTICAL_LIST) {
if (itemPosition == 1) {
outRect.set(0, mDivider.getIntrinsicHeight(), 0,0);
}
}
}
}
divider_love.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00CB8589"/>
<size android:height="40dp"/>
</shape>