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