咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          DashboardLayout之scroll版本AutoTableLayout

          Posted on 2013-03-12 13:33 oathleo 閱讀(1563) 評論(0)  編輯  收藏 所屬分類: Android
          iosched 里的DashboardLayout 在scroll里好像有點問題,一個類就事情,沒時間調了,自己寫了個

          1 1 import android.content.Context;
           2 import android.view.View;
           3 import android.widget.LinearLayout;
           4 
           5 public class AutoTableLayout extends LinearLayout {
           6 
           7     private int mMaxChildWidth = 0;
           8     private int mMaxChildHeight = 0;
           9 
          10     //列數
          11     private int column = 0;
          12     //是否自定義列數
          13     private boolean isCustomColumn = false;
          14     
          15     public AutoTableLayout(Context context) {
          16         super(context, null);
          17     }
          18 
          19     public AutoTableLayout(Context context, int col) {
          20         super(context, null);
          21         column = col;
          22         isCustomColumn = true;
          23     }
          24 
          25     @Override
          26     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          27         mMaxChildWidth = 0;
          28         mMaxChildHeight = 0;
          29 
          30         final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST);
          31         final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.AT_MOST);
          32 
          33         final int count = getChildCount();
          34         for (int i = 0; i < count; i++) {
          35             final View child = getChildAt(i);
          36             if (child.getVisibility() == GONE) {
          37                 continue;
          38             }
          39 
          40             child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
          41 
          42             mMaxChildWidth = Math.max(mMaxChildWidth, child.getMeasuredWidth());
          43             mMaxChildHeight = Math.max(mMaxChildHeight, child.getMeasuredHeight());
          44         }
          45 
          46         int width = resolveSize(mMaxChildWidth, widthMeasureSpec);
          47 
          48         // 每行個數
          49         if (!isCustomColumn) {
          50             column = (int) Math.floor((double) width / mMaxChildWidth);
          51         }
          52          
          53         int row = (int) Math.ceil((double) count / column);
          54 
          55         int height = mMaxChildHeight * row;
          56         setMeasuredDimension(width, height);
          57 
          58     }
          59 
          60     @Override
          61     protected void onLayout(boolean changed, int l, int t, int r, int b) {
          62         int width = r - l;
          63         int height = b - t;
          64         
          65         final int count = getChildCount();
          66         
          67         int left, top;
          68         int col, row;
          69         
          70         int gap = (width - column * mMaxChildWidth) / (column + 1);
          71         
          72         for (int i = 0; i < count; i++) {
          73             final View child = getChildAt(i);
          74 
          75             row = (int) Math.floor( (double)i / column);
          76             col = i % column;
          77 
          78             left = l + (col + 1) * gap + col * mMaxChildWidth;
          79             top = t + row * mMaxChildHeight;
          80             
          81             
          82             child.layout(left, top, left + mMaxChildWidth, top + mMaxChildHeight);
          83         }
          84     }
          85 
          86 }
          主站蜘蛛池模板: 东莞市| 汉寿县| 鄂伦春自治旗| 家居| 循化| 贵港市| 涞源县| 青海省| 勐海县| 铜梁县| 社旗县| 汤原县| 科尔| 诸城市| 巨鹿县| 南阳市| 澜沧| 惠来县| 台东市| 三亚市| 东乡族自治县| 秭归县| 屏边| 禄劝| 宝清县| 常宁市| 都江堰市| 霍城县| 锡林浩特市| 张家界市| 连州市| 溆浦县| 鄢陵县| 峡江县| 额尔古纳市| 故城县| 南涧| 博罗县| 宁化县| 承德市| 宝鸡市|