网上找了些资料 感觉写的好麻烦 于是按自己的想法写了一个 同样思路也可以再recyclerview之类的用
public class AutoHeightGridView extends GridView { private int itemNum; public AutoHeightGridView(Context context) { super(context); } public AutoHeightGridView(Context context, AttributeSet attrs) { super(context, attrs); } public AutoHeightGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); View localView1 = getChildAt(0); if(null == localView1){ return; } int column = getWidth() / localView1.getWidth();//计算出一共有多少列, int childCount = getChildCount();//子view的总数 System.out.println("子view的总数childCount==" + childCount); Paint localPaint;//画笔 localPaint = new Paint(); localPaint.setTextSize(2); localPaint.setStyle(Paint.Style.STROKE); // localPaint.setColor(getContext().getResources().getColor(R.color.light_black));//设置画笔的颜色 localPaint.setColor(Color.parseColor("#C8C8C8"));//设置画笔的颜色 for (int i = 0; i < childCount; i++) {//遍历子view View cellView = getChildAt(i);//获取子view if((i+1)%column != 0){//不是最后一个就画底部和右侧的线 canvas.drawLine(cellView.getLeft(), cellView.getBottom()-(float) Math.floor(i/column), cellView.getRight(), cellView.getBottom()-(float) Math.floor(i/column), localPaint); canvas.drawLine(cellView.getRight(), cellView.getBottom(), cellView.getRight(), cellView.getTop(), localPaint); }else{ canvas.drawLine(cellView.getLeft(), cellView.getBottom()-(float) (i/column), cellView.getRight(), cellView.getBottom()-(float) Math.floor(i/column), localPaint); } } } }
直接在需要用的地方引用
<com.holly.common_view.view.AutoHeightGridView android:id="@+id/gv_content" android:numColumns="2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:listSelector="@null" android:horizontalSpacing="0dp" android:verticalSpacing="0dp" />最后自己在适配器的item中加个点击效果就好了