编程

当前位置:澳门新莆京娱乐官网 > 编程 > 学习笔记【澳门新莆京娱乐官网】

学习笔记【澳门新莆京娱乐官网】

来源:http://www.drgigabytes.com 作者:澳门新莆京娱乐官网 时间:2020-03-01 22:48

View的简介 - Because if I don’t write it down

View的干活流程分为两局地,第一片段 展现在显示屏上的长河, 第二部分 响应显示屏上的触摸事件的进度。

对此展现在显示器上的进程:是View 白手兴家,经过测量大小、明确在荧屏中的地点、以至尾声绘制在荧屏上 这一体系的长河。Measure(State of Qatar Layout(State of Qatar方法是final修饰的,不能够重写 ,Draw(State of Qatar即使不是final的,然则也不提议重写该措施。

基于延续对象的两样自定义View又分为世袭View 与ViewGroup二种。

Mesaure

setMeasuredDimension设置衡量的View的宽/高

onMeasure通过父View传递过来的尺寸和情势,以致本身的背景图片的尺寸得出本人最后的深浅,通过setMeasuredDimension(卡塔尔国方法设置给mMeasuredWidth和mMeasuredHeight。View的onMeasure逻辑伯仲之间,基本都以度量自个儿内容和背景,然后根据父View传递过来的MeasureSpec实行最终的大小判别,举个例子TextView会依照文字的长短,文字的朗朗上口,文字行高,文字的行宽,显示格局,背景图片,以至父View传递过来的方式和尺寸最终分明自身的分寸

ViewGroup本人未有完毕onMeasure,不过他的子类都有些的兑现,平日他们都是透过measureChildWithMargins函数可能其余肖似于measureChild的函数来遍历度量子View,被GONE的子View将不参预衡量,当全体的子View都衡量达成后,才遵照父View传递过来的形式和大小来最终决定自身的朗朗上口。ViewGroup平时都在度量完全数子View后才会调用setMeasuredDimension(卡塔尔(قطر‎设置本人民代表大会小。

澳门新莆京娱乐官网 1

澳门新莆京娱乐官网,经过measure 完结后,大家就足以经过getMeasuredWidth/Height 获取View 的宽高。

Layout

Layout(卡塔尔方法倘若是ViewGroup,则循环遍历全体子View,普通View则空完成,因而一旦大家后续ViewGroup 大家须要遍历试行全数的child.layout(卡塔尔国。

子View的职位日常还受有别的品质左右,比方父View的orientation,gravity,自个儿的margin等等,影响布局的成分丰裕多。

Layout方法中经受四个参数,是由父View提供,钦命了子View在父View中的左、上、右、下之处。父View在内定子View的地点时平常会凭借子View在measure中度量的深浅来决定。

onLayout是ViewGroup用来调节子View摆放地点的,各个构造的差异都在该方法中收获了彰显。

onLayout比layout多三个参数,changed,该参数是在setFrame通过比对上次的岗位得出是还是不是发生了退换,平时该参数未有被选拔的含义,因为父View地方和分寸不改变,并不能够代表子View之处和尺寸未有产生更动。

澳门新莆京娱乐官网 2

Draw

draw(卡塔尔(قطر‎的长河固然绘制View到荧屏上的进度,draw(卡塔尔国的实践坚决守护如下步骤:* 1. Draw the background

* 2. If necessary, save the canvas' layers to prepare for fading(保存画布的图层来筹划色变卡塔尔(قطر‎

* 3. Draw view's content

* 4. Draw children(绘制children)

* 5. If necessary, draw the fading edges and restore layers(画出褪色的边缘和还原层卡塔尔(قطر‎

* 6. Draw decorations (scrollbars for instance卡塔尔(绘制装饰 比如scollbar卡塔尔(قطر‎

澳门新莆京娱乐官网 3

多少个相比根本的方法:

requestLayout:

当view鲜明自个儿已经不再相符现存的区域时,该view本身调用这些法子必要parent view重新调用他的onMeasure onLayout来再次安装自个儿职位。非常是当view的layoutparameter发生改变,况兼它的值尚未能应用到view上时,这个时候相符调用那个主意。

postInvalidate 与invalidate

分界面刷新 onDraw方法会试行,差异正是Invalidate无法直接在线程中调用,因为她是违背了单线程模型:Android UI操作实际不是线程安全的,何况那么些操作必得在UI线程中调用。 鉴于此,假设要运用invalidate的刷新,这我们就得杰出handler的使用,使异步非ui线程转到ui线程中调用,借使要在非ui线程中一贯动用就调用postInvalidate方法就可以,那样就省去采纳handler的沉闷。

getMeasurewidth(卡塔尔/getMeasureHeight(卡塔尔(قطر‎和getWidth/geiHeight(卡塔尔(قطر‎有怎样两样?

在当显示屏能够打包内容的时候,他们的值非常,

唯有当view超过显示器后,才干见到他们的分别:

getMeasuredHeight(卡塔尔是实在View的尺寸,与显示屏毫无干系,

而getHeight的轻重那个时候则是显示屏的高低。

当不独有荧屏后,getMeasuredHeight()等于getHeight(卡塔尔加上显示器之外没有显得的尺寸

本文由澳门新莆京娱乐官网发布于编程,转载请注明出处:学习笔记【澳门新莆京娱乐官网】

关键词: