Android RecyclerView自定义横向分割线实现时间轴
2016-11-17 14:53
429 查看
最近项目用到时间轴,用RecyclerView来实现省时省力
首先设置横向LayoutManager
接着写item布局,如下图时间轴中item只是垂直布局中一个ImageView,一个TextView.
时间轴的线是用自定义的ItemDecoration来实现。
有两个构造方法,一个不传居中参照Drawable则时间线以整个item居中,另一个反之。
首先设置横向LayoutManager
LinearLayoutManager linearLayoutManagerHorizontal = new LinearLayoutManager(this); linearLayoutManagerHorizontal.setOrientation(LinearLayoutManager.HORIZONTAL); mRecyclerView.setLayoutManager(linearLayoutManagerHorizontal);
接着写item布局,如下图时间轴中item只是垂直布局中一个ImageView,一个TextView.
时间轴的线是用自定义的ItemDecoration来实现。
有两个构造方法,一个不传居中参照Drawable则时间线以整个item居中,另一个反之。
public class RecyclerDivider extends RecyclerView.ItemDecoration { private int dividerHeight; private int dividerWidth; private Paint mPaint; private Drawable middleOfDrawable; public RecyclerDivider(int color, int dividerHeight, int dividerWidth) { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(color); mPaint.setStyle(Paint.Style.FILL); this.dividerHeight = dividerHeight; this.dividerWidth = dividerWidth; } public RecyclerDivider(int color, int dividerHeight, int dividerWidth, Drawable middleOfDrawable) { this(color, dividerHeight, dividerWidth); this.middleOfDrawable = middleOfDrawable; } @Override public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) { final int childSize = parent.getChildCount(); for (int i = 0; i < childSize - 1; i++) { final View child = parent.getChildAt(i); RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getRight() + layoutParams.rightMargin; int right = left + dividerWidth; int top = 0; int bottom = 0; if (middleOfDrawable != null) { top = middleOfDrawable.getIntrinsicHeight() / 2 - dividerHeight; bottom = middleOfDrawable.getIntrinsicWidth() / 2 + dividerHeight; } else { top = child.getHeight() / 2 - dividerHeight; bottom = child.getHeight() / 2 + dividerHeight; } canvas.drawRect(left, top, right, bottom, mPaint); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.set(0, 0, dividerWidth, dividerHeight); }
mRecyclerView.addItemDecoration(new RecyclerDivider(getResources().getColor(R.color.white), 2, 60, getResources().getDrawable(R.mipmap.ic)));
相关文章推荐
- android中RecyclerView自定义分割线实现
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android RecyclerView中实现自定义GridView的方式(实现不同item)
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android 自定义RecyclerView 实现真正的Gallery效果