自定义viewgroup

2023-03-11 01:08:24 来源:网络

自定义viewgroup

Android自定义布局ViewGroup

2.onLayout()方法中,通过view.layout(left,right,top,bottom)。

layout方法会设置该View视图位于父视图的坐标轴

其中left:子布局的左侧到父布局左侧的距离,right:子布局的右侧到父布局左侧的距离,top:子布局的上侧到父布局上侧的距离,bottom:子布局的下侧到父布局上侧的距离。

android基础-viewgroup的测量,布局,绘制

相关文章

android基础-view的测量,布局,绘制

viewgroup的作用主要用于管理子view,而在测量的时候可以分两种情况

关于viewgroup遍历子view去测量的方法,android中已经帮我们封装了两个常用方法:

protected void measureChildren(int widthMeasureSpec, int heightMeasureSpec)

protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

从方法名和方法里面不难看出这两个方法的区别,就是后者把子view的padding和margin也考虑了进去,不过他们最终调用的都是子view的 view.measure(int wSpec,int hSpec) 方法该方法回触发子view的 onMeasure 方法

最后在测量子view之后,就要对自身大小做决定了,同样是根据不同的测量模式来确定最终的大小,并且最后需要调用

protected final void setMeasuredDimension(int measuredWidth, int measuredHeight)

该方法来设置viewgroup的宽高

viewgroup的测量栗子如下:

在自定义viewgroup的时候,我们必须重写如下方法:

该方法主要就是通知子view去设置他们的布局位置,之前 android基础-view的测量,布局,绘制 的篇章也已经详细说明了view.layout方法的过程

viewgroup通知情况下不需要绘制,因为他本身就没有需要绘制的东西,如果不是指定了viewgroup的背景色,那么viewgroup的onDraw方法都不会被调用。但是,viewgroup会使用dispatchDraw()方法来绘制其子view,其过程同样是通过变遍历所有的子view,并调用子view的绘制方法来完成绘制工作

注意对于viewgroup而言onDraw()先于dispatchDraw()执行,用于本身控件的绘制,dispatchDraw()用于子控件的绘制,所以如果想对于viewgroup中绘制完子view之后在对其修改,我们可以在dispatchDraw调用surper方法之前做自己想要的绘制效果,这样避免了被子view的覆盖

viewgroup的测量,布局,绘制,其实都只是用来管理和通知子view去具体实现,可能最主要就是onLayout方法去定义子view的显示位置,其他的核心都是在view中做处理的,所以先理解清楚view的显示过程,那么再来理解viewgroup的显示过程,就会容易理解许多

《Android群英传》¬

免责声明:内容来自网络,若侵犯您的权利,请在一个月内通知我们,会及时删除 @轻流