三杆火枪干掉自定义View

从源码角度结合项目实例深入学习自定义View

三杆火枪干掉自定义View
1102人加入学习
(18人评价)
价格 ¥49.00
会员免费学 购买课程

PorterDuffXfermode 实现圆角图片,这个类的作用是两个图形重叠的情况下,如何显示

 

Matrix 的set draw pre操作。。当前的执行顺序 pre对头插入  post对尾插入  set 清空队列东西,只有自己。。。。执行顺序对队头到队尾

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
  1. Canvas通过clipeRect剪裁操作,之后进行的一系列操作只会在裁剪的的区域内进行
  2. 通过canvas的save(),和canvas的restore()方法能解决Canvas进行了裁剪操作,之后的操作只能在裁剪操作,同时能在未裁剪的画布进行操作
[展开全文]

当Canvas进行剪裁操作后,Canvas进行的绘制操作只会在剪裁区域内显示。

[展开全文]

getMeasureWidth()和getWidth()的区别:

1、获取的时机不同

一个是在measure结束后获取到的;一个是在layout结束后获取到的。

2、计算的方式不一样

一个是由setMeasuredDimension计算得到;一个是由右边坐标减去左边坐标得到。

 

[展开全文]

MeasureSpec(测量规格)

1、MeasureSpec封装了父布局传递给子View的布局要求

2、MeasureSpec可以表示宽和高

3、MeasureSpec由size和mode组成

 

MeasureSpec是一个32位的int数据. 
其中高2位代表SpecMode即某种测量模式,低30位为SpecSize代表在该模式下的规格大小.

获取SpecSize:

int specSize = MeasureSpec.getSize(measureSpec);

获取SpecMode:

int specMode = MeasureSpec.getMode(measureSpec);

由SpecSize和SpecMode可以生成新的MeasureSpec:

int measureSpec=MeasureSpec.makeMeasureSpec(size, mode);

 

SpecMode有三种模式:

1、MeasureSpec.EXACTLY

父容器已经检测出子View所需要的精确大小。 

在该模式下,View的测量大小即为SpecSize。

2、MeasureSpec.AT_MOST

父容器未能检测出子View所需要的精确大小,但是指定了一个可用大小即specSize。
在该模式下,View的测量大小不能超过SpecSize。

3、MeasureSpec.UNSPECIFIED

这种模式一般用作Android系统内部,或者ListView和ScrollView等滑动控件

 

核心思想:

子View的MeasureSpec由其父容器的MeasureSpec和该子View本身的布局参数LayoutParams共同决定。 


在此经过测量得出的子View的MeasureSpec是系统给出的一个期望值(参考值),我们也可摒弃系统的这个测量流程,直接调用setMeasuredDimension( )设置子View的宽和高的测量值。

根据父View的specMode的不同来决定子View的specMode和specSize。

 

 

 

 

[展开全文]

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

[展开全文]

自定义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

[展开全文]