咖啡伴侣

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

DashboardLayout之scroll版本AutoTableLayout

Posted on 2013-03-12 13:33 oathleo 阅读(1469) 评论(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 }

只有注册用户登录后才能发表评论。


网站导航: