RecyclerView设置分割线的两种方法
来源:互联网 发布:淘宝开店最新规则 编辑:程序博客网 时间:2024/05/14 18:05
方法一.在item条目布局中直接在底部设置一个View,背景设置成想要的分割线颜色,高度设置成1dp, 这个方法很简单,只是是小聪明啦....
方法二.在给recyclerview设置各种参数的时候 设置分割线
1.重写了一个可以用的MyDividerItemDecoration类
import android.content.Context;import android.graphics.Canvas;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.support.v4.content.ContextCompat;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by weichenxu on 2017/07/04. */public class MyDividerItemDecoration extends RecyclerView.ItemDecoration { //获取布局的方向 public static final int HORIZONTAL = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL = LinearLayoutManager.VERTICAL; //可以延长的 private Drawable mDivider; private int mOrientation; //方向的判断 private void setOrientation(int orientation) { if (orientation != HORIZONTAL && orientation != VERTICAL) { throw new IllegalArgumentException("你传递的方向参数好像有问题"); } //方向赋值给对象mOrientation; mOrientation = orientation; } /** * 自定义分割线 * * @param context * @param orientation 列表方向 * @param drawableId 分割线图片 */ public MyDividerItemDecoration(Context context, int orientation, int drawableId) { mDivider = ContextCompat.getDrawable(context, drawableId); setOrientation(orientation); } //重写onDraw()方法。并且根据传递过来的方向来进行绘制分割线 @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } /** * 绘制横向 item 分割线 * @param parent */ private void drawHorizontal(Canvas c, RecyclerView parent) { //左右的间距 ,left就是距离父类边界的距离,right同理 final int left = parent.getPaddingLeft()+10; final int right = parent.getWidth() - parent.getPaddingRight()-10; //获取item数据的长度 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); } } /** * 绘制纵向 item 分割线 * @param parent */ private void drawVertical(Canvas c, RecyclerView parent) { //左右的间距 ,top就是距离父类顶边界的距离,bottom是距离父类底部的边界距离 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); } } /* * 获取分割线尺寸 * getItemOffsets 中为 outRect 设置的4个方向的值,将被计算进所有 decoration 的尺寸中,而这个尺寸,被计入了 RecyclerView 每个 item view 的 padding 中 * */ public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL) { //在这个地方,我们才获取 outRect.set(0, 0, 0, mDivider.getIntrinsicWidth()); }else{ outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } }}
2.写一个分割线的shape图形
3.设置分割线 (参数中 如果分割线是横着的 需要把分割线设置成水平的,把分割线的图片设置上去)
//1.设置分界线recyclerview.addItemDecoration(new MyDividerItemDecoration(getApplicationContext(), MyDividerItemDecoration.HORIZONTAL, R.drawable.divider));
阅读全文
0 0
- RecyclerView设置分割线的两种方法
- RecyclerView添加分割线的两种方法
- RecyclerView添加分割线的简便方法
- recyclerview添加分割线的方法
- RecyclerView的分割线
- recyclerView的分割线
- recyclerview的分割线
- RecyclerView的分割线
- RecyclerView的分割线
- RecyclerView设置divider分割线
- Android自定义分割线_水平及垂直分割线的两种实现方法
- 借用大神的框架为RecyclerView设置分割线
- RecyclerView的万能分割线
- RecyclerView的万能分割线
- RecyclerView的万能分割线
- RecyclerView的分割线 - ItemDecoration
- RecyclerView的分割线:ItemDecoration
- RecyclerView的万能分割线
- Tomcat7 管理员配置
- 阿里云ECS服务器配置Nginx支持IPv6
- 数字货币开发专题(加密过的利息币钱包如何获得POS利息?)
- HSSFWorkBooK用法
- 初识ESLint基于VScode
- RecyclerView设置分割线的两种方法
- 什么是NAT技术与代理服务器
- GsyVideoPlayer视频分析(一)------------GSYVideoPlayer的初始化
- angular学习(十七)——-Animations
- 自制时间轴 效果很赞
- LCD驱动程序之硬件操作
- openstack底层技术-使用openvswitch
- liunx秘钥转换成ppk格式
- Android 内存优化总结