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

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

49.00元

view的measureSpec是由父view的mode(EXACTLY/AT_MOST/UNSPECIFIED)和子view的布局参数(确定值/MATCH_PARENT/WARP_CONTENT)共同确定得到的

[展开全文]

scrollTo/scrollBy滑动的只是内容

[展开全文]

自定义View显示过程:onMeasure--->onLayout--->onDraw

自定义用户交互过程:dispatchTouchEvent--->onInterceptTouchEvent--->onTouchEvent

[展开全文]

SET 表示执行位移缩放

SET 表示清空队列将自己放入中间

preScale 表示放入列队的对头操作(顶端)

postScale 表示放入列表的对尾操作(底端)

[展开全文]

1.save后锁定画板之后的操作对它有影响

2.在执行后save后系统会生成一个新的layer图层

3.我们所绘制的图形会展示在layer上它不会影响到原来的

4.我们在layer上画完之后会把原来的图层覆盖到原来的画板上也就是执行地了restore

5.我们可以在原来的基础上继续画。

最好是对等的执行save 和restore 否则可能会报错

[展开全文]

派发down时候没有找到一个子view去处理事件,那么直接自己去处理事件。

[展开全文]

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本身的布局参数共同决定的。 

[展开全文]

相关课程

293 10 69.00元
290 8 试看 99.00元