DividerGridView 优化
来源:互联网 发布:网络信息自查报告 编辑:程序博客网 时间:2024/05/21 15:44
package com.lidd.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.view.View;import android.widget.GridView;public class MyDividerGridView extends GridView { private int columnNum; private int childNum; private Drawable leftDividerDrawable; private Drawable bottomDividerDrawable; public MyDividerGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyDividerGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyDividerGridView(Context context) { super(context); } public void setLeftDividerDrawable(Drawable leftDividerDrawable) { this.leftDividerDrawable = leftDividerDrawable; } public void setBottomDividerDrawable(Drawable bottomDividerDrawable) { this.bottomDividerDrawable = bottomDividerDrawable; } private void drawLeft(Canvas canvas,View itemView){ int top = itemView.getTop(); int bottom = itemView.getBottom()+bottomDividerDrawable.getIntrinsicHeight(); int right = itemView.getRight() + leftDividerDrawable.getIntrinsicWidth(); int left = itemView.getRight(); leftDividerDrawable.setBounds(left, top, right, bottom); leftDividerDrawable.draw(canvas); } private void drawLeftLow(Canvas canvas,View itemView){ int top = itemView.getTop(); int bottom = itemView.getBottom(); int right = itemView.getRight() + leftDividerDrawable.getIntrinsicWidth(); int left = itemView.getRight(); leftDividerDrawable.setBounds(left, top, right, bottom); leftDividerDrawable.draw(canvas); } private void drawBottom(Canvas canvas,View itemView){ int left = itemView.getLeft(); int right = itemView.getRight(); int bottom = itemView.getBottom() + bottomDividerDrawable.getIntrinsicHeight(); int top = itemView.getBottom(); bottomDividerDrawable.setBounds(left, top, right, bottom); bottomDividerDrawable.draw(canvas); } private boolean isLastRight(int pos,int spanClounm){ return (pos+1) % spanClounm == 0; } private int getColunmNum(int num,int spanClounm){ return num / spanClounm + (((num % spanClounm) > 0)? 1:0); } private boolean isLastBottom(int pos,int allNums,int spanClounm){ return getColunmNum(pos+1,spanClounm) == getColunmNum(allNums,spanClounm); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); View child0 = getChildAt(0); columnNum = getWidth() / child0.getWidth(); childNum = getChildCount(); // 底部是否需要 分割线 for (int i = 0; i < childNum; i++) { if(isLastRight(i,columnNum)){ if(!isLastBottom(i,childNum,columnNum)){ drawBottom(canvas,getChildAt(i)); } }else if(isLastBottom(i,childNum,columnNum)){ drawLeftLow(canvas,getChildAt(i)); }else{ drawLeft(canvas,getChildAt(i)); drawBottom(canvas,getChildAt(i)); } }// for (int i = 0; i < childNum; i++) {//// if(isLastRight(i,columnNum)){////// drawBottom(canvas,getChildAt(i));////// }else{//// drawLeft(canvas,getChildAt(i));// drawBottom(canvas,getChildAt(i));// }// } }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.lidd.view.MyDividerGridView android:id="@+id/divider_grid_view_content" android:layout_width="match_parent" android:layout_height="match_parent" android:verticalSpacing="1dp" android:horizontalSpacing="1dp" android:listSelector="@android:color/transparent" android:numColumns="3" /></LinearLayout>
原理:利用
android:verticalSpacing="1dp" android:horizontalSpacing="1dp"
再画:
divider
优化点:
使得每个item的宽度都一样
0 0
- DividerGridView 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 更新gcc到4.8
- 孙子兵法与企业经营1
- 杭电OJ 5826 physics
- QT QIODevice类
- android圆形的头像
- DividerGridView 优化
- Java 修饰符
- Synposys VCS 安装
- leetcode:Trapping Rain Water(JAVA)
- matlab修改m文件(如修改内部自带文件)调出m文件方法
- eclipse(java)常用快捷键
- 机器学习-Python中训练模型的保存和再使用
- 贪心——HDU 1009
- HTTPClient