三杆火枪干掉自定义View 扫二维码继续学习 二维码时效为半小时

从源码角度结合项目实例深入学习自定义View
(16 评论)

49.00元

translate移动的是坐标系,而不是内容

[展开全文]

viewgroup的layout方法是为了确定其自身在父view中的位置,而viewgroup的onlayout方法是为了确定子view的位置

[展开全文]

子view的measureSpec是由父view的measureSpec和子view的布局参数共同决定的

[展开全文]

Scroller滑动时只是滑动了view的内容

[展开全文]

1、measure

最难。但又是第一步

2、layout

3、draw

[展开全文]

圆角的图片:

PorterDuffXfermode

 

两个图形,各种规则,显示不同的部分。

[展开全文]

canvas

translate 平移  操作是移动坐标系

rotate 旋转  操作是旋转坐标系

clipRect 剪裁  剪裁后绘制的只会在剪裁后的区域显示(有效绘图空间)。。。如果想要在剪裁前的区域绘图,那么我们可以在剪裁前使用canvas.save()方法,剪裁完后再调用canvas.restore(),再绘图(此时的绘图就在剪裁前的区域)

sava()  锁定 

原理:save后面的操作没有影响到原来的图层,原因是因为save之后系统会生成一个透明的layer,之后的操作都在layer上,此时调用restore,就会将绘制的内容覆盖到原来的图层上。

save和restore是配对出现的。一一对应的。

 

[展开全文]

draw的步骤

1.绘制View的背景

2.如果有必要的话,绘制View滑动时边框的渐变效果。

3.绘制View的内容

4.绘制子View

5.如果有必要的话,绘制子View滑动时边框的渐变效果。

6.绘制滚动条,滑动条之类的东西

 

通常情况下是不需要对第2和第5步。

 

 

Canvas

1.绘图工具(笔):Paint

2.在哪画图呢? bitmap  图形会在Bitmap上展示出来。

3.画什么:Rect,Path,text,Bitmap.

4.怎么画? 就是Canvas

 

onDraw(Canvas canvas)

系统会将SKBitmap和canvas绑定在一起,

Skia  是底层google绘图的东西

[展开全文]

ViewGroup 首先执行Layout方法确定自己在父View的位置,后会执行onLayout方法确定子View的位置。

[展开全文]

onMesure()过程:

onMesure()调用

setMeasuredDimension() 设置View的宽和高

getDefaultSize()  获取View的宽和高

getSuggestedMinimumWidth() 

getSuggestedMinimumHeight()获取宽和高的最小值

[展开全文]

MeasureSpec 测量规格 32位整形数据

高2位代表mode 模式

低30位代表size 大小

 

mode:

1.MeasureSpec.EXACTLY

父容器已经检测出子View的大小,即size

2.MeasureSpec.AT_MOST

父容器没有检测出子View的大小

3.MeasureSpec.UNSPECIFIED

父容器不管子View 

 

 

要确认子View的MeasureSpec,需要通过父View的MeasureSpec和子View本身的布局参数共同决定的。 

[展开全文]

1.scroll的本质是,scroller 滑动的本质view的内容

2.

[展开全文]

1.继承自View

需处理 onMeasure wrap_content

2.继承系统已有的View:TextView

3.继承ViewGroup

onMeasure onLayout

4.继承系统已经有的ViewGroup

 

[展开全文]

measure layout draw

 

[展开全文]

6个常用的工具类:

1Configuration(配置)

2ViewConfiguration(视图配置)

   提供了自定义控件用到的标准常量

3GestureDetector(手势识别)

4VelocityTracker(速度跟踪器)

5Scroller

6ViewDragHelper

[展开全文]

 

color-themes.com/?view=index

MeasureSpec

·封装了父布局对子布局的要求

·32位,高2位mode,低30位size

EXACTLY-精确模式,父View已经检测出了子View所占大小

AT_MOST -未检测出,最大不能超过其size

1. parent-EXACTLY child>=0

 mode = EXACTLY;

 size = childDimension;

2. parent-EXACTLY child-match_parent

 mode = EXACTLY;

 size = Math.max(0, specSize-padding);

3. parent-EXACTLY child-wrap_content

 mode = AT_MOST;

 size = Math.max(0, specSize-padding);

[展开全文]

MeasureSpec 

 封装了父布局对子布局的要求

 封装了模式和大小( )

 

[展开全文]

1.初始化

2.判断是否拦截

3.判断是否取消

4.处理Down事件

[展开全文]

相关课程

232 10 69.00元
254 8 试看 99.00元