首页 > 代码库 > Android 自定义GridView添加网格线
Android 自定义GridView添加网格线
有一个需求是这样的,查了下网上的资料都是利用间隔 ,但是我这个Gridview的背景是渐变的...于是就不好办了...又在google上面看见一个自定义的Gridview,但是有BUG.....在偶数的情况下,最下面一行会有底线...奇数并不会.于是修改了下.
通过重写dispatchDraw 利用Paint进行绘制
package com.hrcp.starsshoot.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import android.widget.GridView; import com.hrcp.starsshoot.R; import com.hrcp.starsshoot.application.Logger; public class LineGridView extends GridView { public LineGridView(Context context) { super(context); } public LineGridView(Context context, AttributeSet attrs) { super(context, attrs); } public LineGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if(getChildAt(0)!=null){<span style="white-space:pre"> </span>View localView1 = getChildAt(0);<span style="white-space:pre"> </span>int column = getWidth() / localView1.getWidth();<span style="white-space:pre"> </span>int childCount = getChildCount();<span style="white-space:pre"> </span>int row=0;<span style="white-space:pre"> </span>if(childCount%column==0){<span style="white-space:pre"> </span>row=childCount/column;<span style="white-space:pre"> </span>}else{<span style="white-space:pre"> </span>row=childCount/column+1;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>int endAllcolumn=(row-1)*column;<span style="white-space:pre"> </span>Paint localPaint,localPaint2;<span style="white-space:pre"> </span>localPaint = new Paint();localPaint2=new Paint();<span style="white-space:pre"> </span>localPaint.setStyle(Paint.Style.STROKE);localPaint2.setStyle(Paint.Style.STROKE);<span style="white-space:pre"> </span>localPaint.setStrokeWidth(2);localPaint2.setStrokeWidth(2);<span style="white-space:pre"> </span>localPaint.setColor(Color.parseColor("#C12817"));localPaint2.setColor(Color.parseColor("#F75845"));<span style="white-space:pre"> </span> for(int i = 0;i < childCount;i++){<span style="white-space:pre"> </span> View cellView = getChildAt(i);<span style="white-space:pre"> </span> if((i + 1) % column != 0){<span style="white-space:pre"> </span> <span style="white-space:pre"> </span> canvas.drawLine(cellView.getRight(), cellView.getTop(), cellView.getRight(), cellView.getBottom(), localPaint);<span style="white-space:pre"> </span> canvas.drawLine(cellView.getRight()+1, cellView.getTop(), cellView.getRight()+1, cellView.getBottom(), localPaint2);<span style="white-space:pre"> </span> }<span style="white-space:pre"> </span> if((i+1)<=endAllcolumn){<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>canvas.drawLine(cellView.getLeft(), cellView.getBottom(), cellView.getRight(), cellView.getBottom(), localPaint);<span style="white-space:pre"> </span> <span style="white-space:pre"> </span> canvas.drawLine(cellView.getLeft(), cellView.getBottom()+1, cellView.getRight(), cellView.getBottom()+1, localPaint2);<span style="white-space:pre"> </span> }<span style="white-space:pre"> </span> }<span style="white-space:pre"> </span> if(childCount % column != 0){<span style="white-space:pre"> </span> for(int j = 0 ;j < (column-childCount % column) ; j++){<span style="white-space:pre"> </span> View lastView = getChildAt(childCount - 1);<span style="white-space:pre"> </span> canvas.drawLine(lastView.getRight() + lastView.getWidth() * j, lastView.getTop(), lastView.getRight() + lastView.getWidth()* j, lastView.getBottom(), localPaint);<span style="white-space:pre"> </span> canvas.drawLine(lastView.getRight() + lastView.getWidth() * j+1, lastView.getTop(), lastView.getRight() + lastView.getWidth()* j+1, lastView.getBottom(), localPaint2);<span style="white-space:pre"> </span> }<span style="white-space:pre"> </span> }<span style="white-space:pre"> </span>} } }
用法 和普通的Gridview 一样
<com.hrcp.starsshoot.widget.LineGridView android:id="@+id/gv_lanuch_start" android:layout_width="match_parent" android:layout_height="wrap_content" android:listSelector="#AD2C1B" android:padding="5dp" android:gravity="center" android:numColumns="3" />
Android 自定义GridView添加网格线
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。