自定义View学习笔记1"/>
自定义View学习笔记1
一:坐标
1. View的坐标系: 2. motionEvent中的方法
二:角度和弧度
为了准确描述一个角的大小,引入了角度和弧度(角度和弧度的进制是不一样的,角度60进制、弧度是10进制)
定义:
1. 角度- 俩条射线从圆心射出,形成一个夹角和夹角正对的一段弧,当这段弧长正好=圆周长1/360,俩条射线的夹角的大小为1度
2. 弧度- 俩条射线从圆心射出,形成一个夹角和夹角正对的一段弧,当这段弧长=圆的半径,俩条射线的夹角大小为1弧度
换算:
圆一周对应的角度deg是360度,对应的弧度rad换算2π弧度==>
rad = deg x π / 180 deg = rad x180/π
注意:
屏幕默认坐标系下,角度的增大方向是顺时针(而在数学中角度的增大是逆时针)
三:颜色
支持的颜色(字母 - 通道类型、 数值 - 该类型用多少位二进制描述):
ARGB8888(四通道高精度32位)
ARGB4444(四通道低精度16位)
RGB565(屏幕默认模式16位)
Alpha8(仅有透明通道8位)
说明(RGB全取最小值:黑色、 RGB全取最大值:白色):
A-Alpha:透明度(0 - 255 透明 - 不透明)
R-Red:红色(0 - 255 无色 - 红色)
G-Green:绿色(0 - 255 无色 - 绿色)
B-Blue:蓝色(0 - 255 无色 - 蓝色)
创建和使用:
int color = Color.GRAY;//灰色
int color = Color.argb(127,255,0,0);//半透明红色
取色工具介绍:
1. ColorPix下载地址(针对win)/
2. Picpick下载地址(针对Win)/zh/
3. Sip下载地址(针对Mac)
说明:
因为显示屏是无法透明的,所以最终显示在屏幕上的颜色可以认为没有Alpha通道
Alpha通道主要是用来俩个图像混合的时候生效
混合模式计算:
(RGB通道)最终颜色 = 绘制颜色+(1-绘制颜色透明度) x Canvas上的原有颜色
四: 绘制流程
说明:
1. 自定义ViewGroup:
利用现有组件根据特定布局方式来组成新的组件(大多继承ViewGroup和Layout,包含有子View)
2. 自定义View:
自己实现需要的功能,一般继承自View、SurfaceView或其他的View,不包含子View
注: 2.1 自定义View在大多数情况下都有替代方案,利用图片或组合动画来实现
2.2 使用图片和组合动画可能会面临内存耗费过大,制作麻烦等问题
函数说明:
1. 构造函数:初始化一些内容和获取自定义属性(自定义属性参数:AttributeSet)
2. 测量View大小(onMeasure):
参数widthMeasureSpec和heightMeasureSpec:宽高和各自方向上对应的测量模式来合成的一个值
View的大小不仅由自身决定,同时也会受到父控件影响,所以为了适应各种情况,一般会自己进行测量,在该方法中可以取到宽高的确切数值和测量模式(MeasureSpec getSize/getMode)
测量模式在MeasureSpec中:
UNSPECIFIED(0)--- 默认值,父控件没有给子View任何限制,子View可以设置为任意大小
EXACTLY((1) --- 父控件确切指定了子View的大小
AT_MOST(2) --- 子View具体大小没有尺寸限制,但是存在上限,上限一般为父View大小
对于View宽高进行修改:使用setMeasuredDimension(widthsize,heightsize)
3. 确定View大小(onSizeChanged):
视图大小发生改变时调用
4. 确定子View的布局位置(onLayout):
在自定义ViewGroup中会使用到,使用子view的layout(了,他,人,b)设置子View的位置
5. 绘制内容(onDraw):
6. 自定义完之后会暴露一席接口对View进行监听或者获取状态等其他属性
五:Canvas绘制图形
1. 常用操作(通过canvas对象调用)
1.1 绘制颜色(使用单一颜色填充整个画布):drawColor、drawRGB、drawARGB
canvas.drawColor(Color.BLUE); //绘制蓝色
1.2 绘制形状(点、线、矩形、圆角矩形、椭圆、圆、圆弧):drawPoint、drawPoints、dra
更多推荐
自定义View学习笔记1
发布评论