android 桌面网格线,Android 自定义GridView添加网格线

本文介绍了一种针对带有渐变背景的GridView实现,作者重写了dispatchDraw方法,通过Paint绘制线条以解决偶数行底部边框bug,提供了一个自定义的LineGridView,使用方式与普通GridView相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

225703_0.png

有一个需求是这样的,查了下网上的资料都是利用间隔 ,但是我这个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){

View localView1 = getChildAt(0);

int column = getWidth() / localView1.getWidth();

int childCount = getChildCount();

int row=0;

if(childCount%column==0){

row=childCount/column;

}else{

row=childCount/column+1;

}

int endAllcolumn=(row-1)*column;

Paint localPaint,localPaint2;

localPaint = new Paint();localPaint2=new Paint();

localPaint.setStyle(Paint.Style.STROKE);localPaint2.setStyle(Paint.Style.STROKE);

localPaint.setStrokeWidth(2);localPaint2.setStrokeWidth(2);

localPaint.setColor(Color.parseColor("#C12817"));localPaint2.setColor(Color.parseColor("#F75845"));

for(int i = 0;i < childCount;i++){

View cellView = getChildAt(i);

if((i + 1) % column != 0){

canvas.drawLine(cellView.getRight(), cellView.getTop(), cellView.getRight(), cellView.getBottom(), localPaint);

canvas.drawLine(cellView.getRight()+1, cellView.getTop(), cellView.getRight()+1, cellView.getBottom(), localPaint2);

}

if((i+1)<=endAllcolumn){

canvas.drawLine(cellView.getLeft(), cellView.getBottom(), cellView.getRight(), cellView.getBottom(), localPaint);

canvas.drawLine(cellView.getLeft(), cellView.getBottom()+1, cellView.getRight(), cellView.getBottom()+1, localPaint2);

}

}

if(childCount % column != 0){

for(int j = 0 ;j < (column-childCount % column) ; j++){

View lastView = getChildAt(childCount - 1);

canvas.drawLine(lastView.getRight() + lastView.getWidth() * j, lastView.getTop(), lastView.getRight() + lastView.getWidth()* j, lastView.getBottom(), localPaint);

canvas.drawLine(lastView.getRight() + lastView.getWidth() * j+1, lastView.getTop(), lastView.getRight() + lastView.getWidth()* j+1, lastView.getBottom(), localPaint2);

}

}

}

}

}

用法 和普通的Gridview 一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值