RecyclerView 的分割线(divider)--DividerItemDecoration
来源:互联网 发布:速凡网络 编辑:程序博客网 时间:2024/06/05 02:56
public class DividerItemDecoration extends RecyclerView.ItemDecoration{ private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); 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); } else { drawHorizontal(c, parent); } } public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } }}
之后在你的RecyclerView加上
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
0 1
- RecyclerView 的分割线(divider)--DividerItemDecoration
- RecyclerView设置divider分割线
- Android,RecyclerView,divider,分割线
- RecyclerView使用资源文件作为分割线divider
- RecyclerView的分割线
- recyclerView的分割线
- recyclerview的分割线
- RecyclerView的分割线
- RecyclerView的分割线
- LinearLayout增加divider分割线
- ListView 设置分割线 Divider
- LinearLayout显示分割线(Divider)
- LinearLayout增加divider分割线
- 关于LinerLayout分割线Divider
- LinearLayout增加divider分割线
- RecyclerView的万能分割线
- RecyclerView的万能分割线
- RecyclerView的万能分割线
- 全局变量关键字global的使用
- TextInputLayout、Snackbar使用
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《二》
- 协同过滤算法实战
- java内存分配与回收
- RecyclerView 的分割线(divider)--DividerItemDecoration
- ext.net 2.5 导出excel的用法
- 百度地图滑动冲突的问题解决
- Hibernate(四)主键属性
- 巧用JVM启动参数定位一个问题
- ap6234移植
- android 源码自带的Demo BluetoothChat
- 解决jsp 文件加载过大的问题
- Android ProgressBar以及子类