RecyclerView 边框线设置
来源:互联网 发布:网络上赌博赢了5千万 编辑:程序博客网 时间:2024/06/05 21:07
本人新手,写这个博客主要给自己看,有什么错误的地方 ,还望指正,不喜勿喷。
import android.graphics.Canvas;import android.graphics.Paint;import android.support.v7.widget.RecyclerView;import android.view.View;public class MyItemDecoration extends RecyclerView.ItemDecoration { @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { //先初始化一个Paint来简单指定一下Canvas的颜色,就黑的吧! 这个地方我们可以设置 paint 的 颜色大小 Paint paint = new Paint(); paint.setStrokeWidth(20); paint.setColor(parent.getContext().getResources().getColor(R.color.hongse)); // 获得RecyclerView中总条目数量 int childCount = parent.getChildCount(); //遍历一下 for (int i = 0; i < childCount; i++) { if (i == 0) { //如果是第一个条目,那么我们就不画边框了 continue; } // 获得子View,也就是一个条目的View,准备给他画上边框 View childView = parent.getChildAt(i); //先获得子View的长宽,以及在屏幕上的位置,方便我们得到边框的具体坐标 float x = childView.getX(); float y = childView.getY(); int width = childView.getWidth(); int height = childView.getHeight(); //根据这些点画条目的四周的线 c.drawLine(x, y, x + width, y, paint); c.drawLine(x, y, x, y + height, paint); c.drawLine(x + width, y, x + width, y + height, paint); c.drawLine(x, y + height, x + width, y + height, paint); //当然了,这里大家肯定是要根据自己不同的设计稿进行画线,或者画一些其他的东西,都可以在这里搞,非常方便 } super.onDraw(c, parent, state); }}
第二种也是找 别人的
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.DashPathEffect;import android.graphics.NinePatch;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathEffect;import android.graphics.Rect;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import java.util.regex.Pattern;public class RecyclerViewItemDecoration extends RecyclerView.ItemDecoration { /**mode for direction*/ public static final int MODE_HORIZONTAL = 0; public static final int MODE_VERTICAL = 1; public static final int MODE_GRID = 2; /**default decoration thick size */ private final int DEFAULT_SIZE = 1; /**default decoration color*/ private final String DEFAULT_COLOR = "#bdbdbd"; /**image resource id for R.java*/ private int drawableRid = 0; /**decoration color*/ private int color = Color.parseColor(DEFAULT_COLOR); /**decoration thick size*/ private int thick; /**decoration dash with*/ private int dashWidth = 0; /**decoration dash gap*/ private int dashGap = 0; /**direction mode for decoration*/ private int recyclerviewMode; private Paint paint; private Bitmap bmp; private NinePatch ninePatch; /**sign for if the resource image is a ninepatch image*/ private Boolean hasNinePatch = false; public RecyclerViewItemDecoration(int recyclerviewMode, Context context, int drawableRid){ this.recyclerviewMode = recyclerviewMode; this.drawableRid = drawableRid; this.bmp = BitmapFactory.decodeResource(context.getResources(), drawableRid); if(bmp.getNinePatchChunk()!=null){ hasNinePatch = true; ninePatch = new NinePatch(bmp, bmp.getNinePatchChunk(), null); } initPaint(); } public RecyclerViewItemDecoration(int recyclerviewMode, int color, int thick, int dashWidth, int dashGap){ this.recyclerviewMode = recyclerviewMode; this.color = color; this.thick = thick; this.dashWidth = dashWidth; this.dashGap = dashGap; initPaint(); } public RecyclerViewItemDecoration(int recyclerviewMode, String color, int thick, int dashWidth, int dashGap){ this.recyclerviewMode = recyclerviewMode; if(isColorString(color)){ this.color = Color.parseColor(color); }else{ this.color = Color.parseColor(DEFAULT_COLOR); } this.thick = thick; this.dashWidth = dashWidth; this.dashGap = dashGap; initPaint(); } private void initPaint(){ paint = new Paint(); paint.setColor(color); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(thick); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { paint.setColor(color); if(recyclerviewMode == MODE_HORIZONTAL){ drawHorinzonal(c,parent); }else if(recyclerviewMode == MODE_VERTICAL){ drawVertical(c,parent); }else if(recyclerviewMode == MODE_GRID){ drawGrid(c,parent); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if(recyclerviewMode == MODE_HORIZONTAL && parent.getChildLayoutPosition(view)!=parent.getAdapter().getItemCount()-1){ if(drawableRid!=0){ outRect.set(0,0,0,bmp.getHeight()); }else{ outRect.set(0,0,0,thick); } }else if(recyclerviewMode == MODE_VERTICAL && parent.getChildLayoutPosition(view)!=parent.getAdapter().getItemCount()-1){ if(drawableRid!=0){ outRect.set(0,0,bmp.getWidth(),0); }else{ outRect.set(0,0,thick,0); } }else if(recyclerviewMode == MODE_GRID){ int columnSize = ((GridLayoutManager)parent.getLayoutManager()).getSpanCount(); int itemSzie = parent.getAdapter().getItemCount(); if(drawableRid!=0){ if(isLastRowGrid(parent.getChildLayoutPosition(view),itemSzie,columnSize) && isLastGridColumn(parent.getChildLayoutPosition(view),columnSize)){ outRect.set(0,0,0,0); }else if(isLastRowGrid(parent.getChildLayoutPosition(view),itemSzie,columnSize)){ outRect.set(0,0,bmp.getWidth(),0); }else if((parent.getChildLayoutPosition(view)+1)%columnSize!=0){ outRect.set(0,0,bmp.getWidth(),bmp.getHeight()); }else { outRect.set(0, 0, 0, bmp.getHeight()); } }else{ if(isLastRowGrid(parent.getChildLayoutPosition(view),itemSzie,columnSize) && isLastGridColumn(parent.getChildLayoutPosition(view),columnSize)){ outRect.set(0,0,0,0); }else if(isLastRowGrid(parent.getChildLayoutPosition(view),itemSzie,columnSize)){ outRect.set(0,0,thick,0); }else if((parent.getChildLayoutPosition(view)+1)%columnSize!=0){ outRect.set(0,0,thick,thick); }else{ outRect.set(0,0,0,thick); } } } } /** * judge is a color string like #xxxxxx or #xxxxxxxx * @param colorStr * @return */ private boolean isColorString(String colorStr){ return Pattern.matches("^#([0-9a-fA-F]{6}||[0-9a-fA-F]{8})$",colorStr); } /** * draw horizonal decoration * @param c * @param parent */ private void drawHorinzonal(Canvas c,RecyclerView parent){ int childrentCount = parent.getChildCount(); if(drawableRid!=0){ if(hasNinePatch) { for(int i=0;i<childrentCount;i++) { if (i != childrentCount - 1) { View childView = parent.getChildAt(i); int myY = childView.getBottom(); Rect rect = new Rect(0, myY, parent.getWidth(), myY+bmp.getHeight()); ninePatch.draw(c, rect); } } }else { for(int i=0;i<childrentCount;i++) { if (i != childrentCount - 1) { View childView = parent.getChildAt(i); int myY = childView.getBottom(); c.drawBitmap(bmp,0,myY,paint); } } } }else if(dashWidth ==0 && dashGap==0){ for(int i=0;i<childrentCount;i++) { if (i != childrentCount - 1) { View childView = parent.getChildAt(i); int myY = childView.getBottom() + thick / 2; c.drawLine(0,myY,parent.getWidth(),myY,paint); } } }else{ PathEffect effects = new DashPathEffect(new float[]{0,0,dashWidth,thick},dashGap); paint.setPathEffect(effects); for(int i=0;i<childrentCount;i++) { if (i != childrentCount - 1) { View childView = parent.getChildAt(i); int myY = childView.getBottom() + thick / 2; Path path = new Path(); path.moveTo(0, myY); path.lineTo(parent.getWidth(),myY); c.drawPath(path, paint); } } } } /** * draw vertival decoration * @param c * @param parent */ private void drawVertical(Canvas c,RecyclerView parent){ int childrentCount = parent.getChildCount(); if(drawableRid!=0){ if(hasNinePatch){ for(int i=0;i<childrentCount;i++) { if (i != childrentCount-1) { View childView = parent.getChildAt(i); int myX = childView.getRight(); Rect rect = new Rect(myX, 0, myX+bmp.getWidth(), parent.getHeight()); ninePatch.draw(c, rect); } } }else{ for(int i=0;i<childrentCount;i++) { if (i != childrentCount-1) { View childView = parent.getChildAt(i); int myX = childView.getRight(); c.drawBitmap(bmp,myX,0,paint); } } } } else if(dashWidth ==0 && dashGap==0){ for(int i=0;i<childrentCount;i++) { if (i != childrentCount-1) { View childView = parent.getChildAt(i); int myX = childView.getRight()+thick/2; c.drawLine(myX,0,myX,parent.getHeight(),paint); } } }else{ PathEffect effects = new DashPathEffect(new float[]{0,0,dashWidth,thick},dashGap); paint.setPathEffect(effects); for(int i=0;i<childrentCount;i++) { if (i != childrentCount-1) { View childView = parent.getChildAt(i); int myX = childView.getRight()+thick/2; Path path = new Path(); path.moveTo(myX, 0); path.lineTo(myX,parent.getHeight()); c.drawPath(path, paint); } } } } /** * 鐢荤綉鏍煎垎鍓茬嚎 * @param c * @param parent */ private void drawGrid(Canvas c,RecyclerView parent){ int childrentCount = parent.getChildCount(); int columnSize = ((GridLayoutManager)parent.getLayoutManager()).getSpanCount(); int adapterChildrenCount = parent.getAdapter().getItemCount(); if(drawableRid!=0){ if(hasNinePatch){ for(int i=0;i<childrentCount;i++) { View childView = parent.getChildAt(i); int myX = childView.getRight(); int myY = childView.getBottom(); //horizonal if(!isLastRowGrid(i,adapterChildrenCount,columnSize)){ Rect rect = new Rect(0, myY, myX, myY+bmp.getHeight()); ninePatch.draw(c, rect); } //vertical if(isLastRowGrid(i,adapterChildrenCount,columnSize) && !isLastGridColumn(i,columnSize)){ Rect rect = new Rect(myX, childView.getTop(), myX+bmp.getWidth(), myY); ninePatch.draw(c, rect); }else if(!isLastGridColumn(i,columnSize)){ Rect rect = new Rect(myX, childView.getTop(), myX+bmp.getWidth(), myY+bmp.getHeight()); ninePatch.draw(c, rect); } } }else{ for(int i=0;i<childrentCount;i++) { View childView = parent.getChildAt(i); int myX = childView.getRight(); int myY = childView.getBottom(); //horizonal if(!isLastRowGrid(i,adapterChildrenCount,columnSize)){ c.drawBitmap(bmp,childView.getLeft(),myY,paint); } //vertical if(!isLastGridColumn(i,columnSize)){ c.drawBitmap(bmp,myX,childView.getTop(),paint); } } } } else if(dashWidth ==0 && dashGap==0){ for(int i=0;i<childrentCount;i++) { View childView = parent.getChildAt(i); int myX = childView.getRight()+thick/2; int myY = childView.getBottom() + thick / 2; //horizonal if(!isLastRowGrid(i,adapterChildrenCount,columnSize)){ c.drawLine(childView.getLeft(),myY,childView.getRight()+thick,myY,paint); } //vertical if(isLastRowGrid(i,adapterChildrenCount,columnSize) && !isLastGridColumn(i,columnSize)) { c.drawLine(myX, childView.getTop(), myX, childView.getBottom(), paint); }else if(!isLastGridColumn(i,columnSize)){ c.drawLine(myX,childView.getTop(),myX,myY,paint); } } }else{ PathEffect effects = new DashPathEffect(new float[]{0,0,dashWidth,thick},dashGap); paint.setPathEffect(effects); for(int i=0;i<childrentCount;i++) { View childView = parent.getChildAt(i); int myX = childView.getRight()+thick/2; int myY = childView.getBottom() + thick / 2; //horizonal if(!isLastRowGrid(i,adapterChildrenCount,columnSize)){ Path path = new Path(); path.moveTo(0, myY); path.lineTo(myX,myY); c.drawPath(path, paint); } //vertical if(isLastRowGrid(i,adapterChildrenCount,columnSize) && !isLastGridColumn(i,columnSize)) { Path path = new Path(); path.moveTo(myX, childView.getTop()); path.lineTo(myX,childView.getBottom()); c.drawPath(path, paint); } else if(!isLastGridColumn(i,columnSize)){ Path path = new Path(); path.moveTo(myX, childView.getTop()); path.lineTo(myX,childView.getBottom()); c.drawPath(path, paint); } } } } /** * check if is one of the last columns * @param position * @param columnSize * @return */ private boolean isLastGridColumn(int position,int columnSize){ boolean isLast = false; if((position+1)%columnSize==0){ isLast = true; } return isLast; } /** * check if is the last row of the grid * @param position * @param itemSize * @param columnSize * @return */ private boolean isLastRowGrid(int position,int itemSize,int columnSize){ return position/columnSize == (itemSize-1)/columnSize; }}
0 0
- RecyclerView 边框线设置
- Android中RecyclerView设置边框并循环滚动
- table 边框线设置
- table的边框线设置
- table的边框线设置
- table的边框线设置
- UITableView背景,边框线设置
- html table设置边框线
- 设置边框
- 边框设置
- 去除UITableView的边框线,背景,边框线设置
- 51-设置单元格的边框-border-collapse(边框线合并)
- 设置Button的边框线的方法
- android shape设置渐变、圆角、边框线
- 通过设置偏移 添加RecyclerView分隔线
- 设置UltraWebTab无边框
- 设置表格边框颜色
- CSS边框设置经验
- PHP中使用PDO操作MySQL
- java.lang.IllegalStateException: You need to use a Theme.AppCompat theme
- 前端点击图片将跳出显示框显示图片
- 【转】Netty那点事(三)Channel中的Pipeline
- JEM帧内预测:Cross-component linear model prediction(CCLM)
- RecyclerView 边框线设置
- 字符串
- css中IE判断语句 if !IE
- SQL如何查询一个数据库中的所有表?
- web项目+Struts2+Mybatis
- webx- Resource Loading
- 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】
- 前端面试题1
- Java访问Sql Server 2008 数据库样例(完整例子)