1自定义View的套路:
1.1 自定义属性,获取自定义属性(实现配置的效果)
1.2 onMeasure()方法用于测量计算自己的宽高,前提是继承自View,如果是继承自系统已有的 TextView , Button ,已经给你计算好了宽高,就测量自己的宽高.
//套路:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//计算自己的宽高
int width =
//来让子 View 的计算结果符合父 View 的限制(当然,如果你想用自己的方式来满足父 View 的限制也行)
int widthSize = resolveSize(width, widthMeasureSpec);
}
1.3 onDraw() 用于绘制自己的显示
1.4 onTouch() 用于与用户交互
2 自定义ViewGroup的套路:
2.1 自定义属性,获取自定义属性(达到配置的效果)很少有
2.2 onMeasure() 方法,for循环测量子View,根据子View的宽高来计算自己的宽高
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//
int width =
//for循环测量子View
int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
//获取子View
View childView = getChildAt(i);
// 这段话执行之后就可以获取子View的宽高,因为会调用子View的onMeasure
measureChild(childView, widthMeasureSpec, heightMeasureSpec);
//根据子View的宽高来计算自己的宽高
width += childView.getMeasuredWidth()
}
//来让子 View 的计算结果符合父 View 的限制
width = resolveSize(width, widthMeasureSpec);
//指定自己的宽高
setMeasuredDimension(width, height);
}
2.3 onDraw() 一般不需要,默认情况下是不会调用,如果你要绘制需要实现dispatchDraw()方法
2.4 onLayout() 用来摆放子View,前提是不是GONE的情况
2.5 在很多情况下不会继承自ViewGroup ,往往是继承 系统已经提供好的ViewGroup 如 ViewPager ScrollView RelativeLayout.
网友评论