DiliderGridView
2016-08-11 17:52
330 查看
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 DividerGridView extends GridView { private int columnNum; private int childNum; private Drawable leftDividerDrawable; private Drawable bottomDividerDrawable; public DividerGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public DividerGridView(Context context, AttributeSet attrs) { super(context, attrs); } public DividerGridView(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(); int right = itemView.getRight(); int left = right - leftDividerDrawable.getIntrinsicWidth(); 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(); int top = bottom - bottomDividerDrawable.getIntrinsicHeight(); 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)){ // // drawLeft(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)); } } } }
相关文章推荐
- AR增强现实 之Metaio For Unity 开发 之HelloWorld
- Qt实现保存、浏览、预览、打印功能
- 控制nginx服务
- 栈的基础应用-2进制转化10进制
- 加密算法
- unity中关于rigidbody成员AddForce方法和AddTorque方法介绍
- 顺序表C版
- 多物体任意值运动框架
- javaFX Menu
- [DL] GTX1080 + Ubuntu16.04 + CUDA 8.0RC + Tensorflow + Theano + keras
- 【JEECG TBSchedule】详解应对平台高并发的分布式调度框架TBSchedule
- 关于如何将一个对象保存到本地文件之ObjectOutputStream、ObjectInputStream的使用小结。
- 算法基础知识科普:8大搜索算法之红黑树(中)
- light oj 1213 - Fantasy of a Summation (数学计数)
- grunt从小白到熟练
- HDU 3094 A tree game
- 在网页中使用SVG技术
- 51node-1354 选数字
- android studio 2.2 使用cmake编译NDK
- 初学C语言:字符串逆序存放(调用函数)