android View介绍

1.     View的介绍

Android里View就是一个矩形窗体的抽象, ViewGruop就是view容器抽象。简单看下view坐标表示


说明:

a)   view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()获取到的值都是相对父容器的坐标。

b)   view获取宽高getHeight(),getWidth()

2.     View的主要方法介绍

一个view的要合理在父容器里绘制出来,首先我们要知道View的大小; 其次要知道View的摆放位置; 最后要把View特定形状画出来。View里onMeasure() 负责测绘大小、

onLayout()负责组件的摆放、 onDraw()负责具体的绘制。

2.1 onMeasure介绍

onMeasure(int widthMeasureSpec, intheightMeasureSpec);

a)该方法主要负责测量组建的大小的。widthMeasureSpec和widthMeasureSpec都是一个32位整形的值,例如widthMeasureSpec前两位代表控件的绘画模式,后三十位代表控件的宽度的值。获取到宽度的大小int width =MeasureSpec.getSize(widthMeasureSpec);

int widthModel=MeasureSpec.getMode(widthMeasureSpec);获取到宽度的大小

b)根据模式和大小合理决定宽高

  三种模式是:[例如以width举例]

  EXACTLY: 精确模式,就是android:layout_width设置了具体值的,例如属性配置的是400dp或者match_parent.

   AT_MOST:最大适配模式,就是配置android:layout_width是wrap_context.

   UNSPECIFIED: 未指定模式,就是android:layout_width没有设置值的

               例如系统获取到组件的模式是EXACTLY,直接宽度是width,如果是wrap_context或者是未指定,就需要根据具体的绘画内容设置宽度的默认值。

c)设置具体的大小

根据模式和大小,合理的测绘出宽高的时候,要把宽高设置下

setMeasuredDimension(intmeasuredWidth,int measuredHeight);

2.2 onLayout方法

onLayout(boolean changed, int l, int t, int r, int b);

该方法主要是摆放子View在父控件的合理位置.l:就是父组件里的左边距; t:就是顶边距;r:就是右边距;b:就是底边距。注意设置一些控件的父边距要在这里边体现,就是android:layout_marginxxx系列的属性。

2.3 onDraw

onDraw(Canvas canvas);

这个就是根据具体的控件内形,在控件内绘制具体的效果。设置一些控件内边距在绘画的时候会用到。就是android:paddingXXX.

 

3.     View常用的方法:

a)     重新刷新界面 invalidate(),其实就是调用View的onDraw()方法。

b)     重新测绘和摆放位置:  requestLayout(),例如子组件有删除的时候,底层就会调用。

c)     View释放一些数据的时候:onDetachedFromWindow();

d)     在Activity里获取View的大小:onwindowfocuschanged()里获取View的大小,在别的方法里获取的时候,会存在View可能还没有测绘完成。

4.     ViewGroup的距离说明LinearLayout:

4.1:onMeasure():

 测绘大小的时候, EXACTLY模式的话指定使用设置的大小,如果是AT_MOST,就需要遍历每一个子控件,获取到每一个子控件的大小,最总才能决定控件的大小。

4.2:  onLayout().

  会根据设置的方向,比如是横向的,就会依次把每一个子控件合理的摆放到水平位置。

4.3  onDraw():

先要绘制LinearLayout自己的东西,比如背景,在依次调用子控件的绘制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值