亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

GridView分割線

標簽:
Android


GridView分割线在某些情景下可能不是很满足我们的需求,我们自己来实现一个可以自己控制的。这里继承GridView,通过测量绘制方法完成

注意:

1.考虑低版本适配,我们需要反射访问隐藏字段;

2.简单点,这里用直线表示,实际开发中可以根据需要定制要绘制的内容

思路:

1.根据Canvas.drawLine(startX, startY, endX, endY, Paint)方法反推,主要参数为startY与endY,二者必然一致,否则就歪。

2.总行数取值分为一屏以内、超出一屏两种情况。当在一屏内时,GridView高度与item高度取整;超出一屏时item总数与单行个数取整,此时会有不足一行的情况,我们要把多出来的算为一行。

3.在上下滑动时如默认不做任何处理,会出现错位现象,我们需要加上item具体位置,保证不会错位


下面继承GridView实现,根据以上思路实现一下:

[代码]java代码:

?


  protected void dispatchDraw(Canvas canvas) {       super.dispatchDraw(canvas);        if (getChildCount() <= 0)           return;       int   numColumns = getNumColumnsCompatible();        View child = getChildAt(0);       if (child == null)           return;       int childHeight = child.getHeight();        int  max = getHeight()/ childHeight;        if (getCount() / numColumns > max ) {           max = getCount() / numColumns ;           int more = getCount() % numColumns ;           if (more > 0) {               max = max + 1;           }       }       dividerLine(canvas, childView,max);    }    private void dividerLine(Canvas canvas, View child,int max) {              int eachY = 0;       for (int i = 1; i < max ; i++) {           eachY = child.getHeight() * i + child.getTop();//确保滑动不错位           canvas.drawLine(0, eachY , parentWidth, eachY , Paint);              }       }     @TargetApi(11)   public int getNumColumnsCompatible() {       if (Build.VERSION.SDK_INT >= 11) {           return super.getNumColumns();       } else {           try {               Field numColumns = GridView.class.getDeclaredField("mNumColumns");               numColumns.setAccessible(true);               return numColumns.getInt(this);           } catch (Exception e) {               if (mNumColumns != -1) {                   return mNumColumns;               }                        }       }   }

可能有人会有疑问,为什么使用dispatchDraw而不使用onDraw方法?

首先:自定义View时,我们在measure、layout之后会调用onDraw完成绘制,此时我们是绘制View自身

此处我们的需求是,在GridView内部绘制出分割线,属于绘制子view。

最后奉上我曾经的思路来源:http://www.2cto.com/kf/201602/489367.html感谢po主分享

原文链接:http://www.apkbus.com/blog-35555-68779.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消