Android绘制基础
Layout内部布局的自定义
-
重写onMeasure()来计算内部布局
- 调用每个子view的measure(),让子view自我测量
- 可用空间的判断方法
- EXACTLY/ATMOST:
- 可用空间:MeasureSpec中的size
- UNSPECFIED:
- 无限大
- EXACTLY/ATMOST:
- 可用空间的判断方法
- 根据子view给出的尺寸,得出子view的位置,并保存他们的位置和尺寸
- 根据子view的位置和尺寸计算出自己的尺寸,并用setMeasuredDimension()保存
- 调用每个子view的measure(),让子view自我测量
-
重写onLayout()来摆放子view
-
案列:
public class SomeLayout extends ViewGroup{ ... @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ for (int i=0; i<getChildCount(); i++){ View childView =getChildAt(i); LayoutParams lp = childView.getLayoutParams(); switch(lp.width){ default://开发者写的固定值 childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width,EXACTLY); } } } }
关于保存子view位置的两点说明
- 不是所有的Layout都需要保存子view的位置(因为有的Layout可以在布局阶段实时推导出子view的位置,例如LinearLayout);
网友评论