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" />


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。