现已有的控件
TextView
BUtton---继承了TextView
CheckBox--继承了button
radioBUtton
progressBar
singbar(评论星星)
自定义控件的定义:
是
Android本身没有提供,需要开发者自定义设计的控件
自定义控件的三种定义形式:
流程:
1.继承已有控件---如Button
2.继承View
3.继承ViewGroup--如RelativeLayout,LinearLayout
使用原因:
现有控件已经满足不了用户需求
自定义View简要步骤:
自定义View的计算机流程:
- 准备工作(加载阶段)---构造方法
- 定一个类继承VIew或者View的子类
- 处理View的构造方法--->View的构造方法
- 测量规划大小(测量阶段)--onMeasure()
-
- 绘制位置(布局阶段)--onLayout()
- 画(绘制阶段)--onDraw()
-
加载阶段--View的构造方法---------
串联构造方法
1.
public
myVIew
(
Context
context
)--使用两个构造的方法
作用:
主要用于创建自定义空间的实例---new的时候
2.
public
myVIew
(
Context
context
,
AttributeSet
attrs
)--两个参数的,使用三个参数的构造方法
作用:
主要用于用户将当前自定义控件声明在布局文件中
注意:
声明布局文件中注意,必须声明空间的"包名+类名"
---
3.
public
myVIew
(
Context
context
,
AttributeSet
attrs
, int
defStyleAttr
)---三个参数的构造
作用:
主要用于用户将当前自定义控件声明在布局文件中,并且加入样式
构造方法的意义:
用于初始化加载数据,即自定义控件的第一个流程
public myVIew(Context context) {
this(context,null);
}
public myVIew(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public myVIew(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();//自己定义的方法
}
this的使用: ()
方便实用,(可以调用其他构造)
例如创建一个方法,只在 第三个构造方法中,调用这个方法,其他两个构造方法使用了this--就像上面的格式,只要创建一个实例都会调用这个方法,因为是串联构造方法
4.利用canvas绘制基本图形
处理一个方法
onDraw()--
绘制阶段调用这个方法
CanVas的方法:
.drawCircle()-----绘制圆形
参数1,2:圆心的x,y坐标
参数3:radius,圆的半径
参数4:画笔 Paint
创建画笔:
Paint p = new
Paint()
//设置画笔颜色
p.setColor(Color.颜色值)
//设置空心圆
p.setStyle(paint.stylw.STROKE)
//设置去除毛边
p.setAntiAlias(true)
true --去除毛边
false--不去除
paint.setFakeBold(true)
--粗体
.setStrileThruText()
--文本中间有横线
.setTextAlign()-
- 文本居中
Paint.align.right---基准点在文本的右边,文本在右边
默认文本基准点在文本的左下角
.setTextScale(缩放的倍数)
--文本X方向缩放--横向缩放
.drawLine()---绘制线
参数1,2;线的起点
参数3,4:线的终点
参数5:画笔
.drawArc()--绘制弧形
参数1:rectf:矩形,是圆弧所在圆的外接矩形
.RectF();
F:代表里面的值为float类型
参数1,2,3,4:---矩形的左上右下
这些参数可以绘制出来的矩形
.Rect():--跟.RectF()一样
参数1,2,3,4:---矩形的左上右下
参数2:绘制的弧的起始角度
参数3:弧形的弧度
参数4:
true---绘制的是扇形
false---绘制的是弧形
参数5:画笔
.drawRect()----绘制矩形
参数1:左上角的那个店
参数二:画笔
.drawPoint()---绘制点
参数一:绘制de点的坐标的集合{x0,y0..........}
参数二:从参数一对应集合中的那个点的起始点,作为起始点的横坐标,后面一次顺延
参数3:需要使用的集合中的元素的个数,但是不要超过集合的长度
参数4:画笔
.drawRoundRect()--绘制圆角矩形
参数1;
参数2,3:控制圆角的弧度
参数4:画笔
用于封装x,y坐标的坐标点
private
PointF
facePoint = new PoIntF(240,400);
Path绘制复杂图形
canvas.drawPath(path,paint)---绘制path
参数1;path--位置
参数2:画笔
path.moveTo(x,y)--移动到某一点(将path移动到起始点)
path.lineTo()--以moveTo之后的点为起始点,以参数1,2为终点绘制一条线段(直线)
path.close()---闭合path
path绘制贝瑟尔曲线
起点
终点
控制点
.quadTo()----图形控制点
参数1,2控制点的X,y坐标
参数3:终点的x坐标
参数4:终点的Y坐标
.addArc()--绘制弧形
.addCircle()---绘制圆形
Canvas的其他处理
保存
.save()--保存当前的状态值
平移
.translate(x,y)
旋转
.rotate(角度)
实际是对坐标器的平移和旋转---起始点基于屏幕左上角
缩放
.scale(x方向的缩放度,y方向的缩放度)
释放
.restore()--恢复到上次save的状态值
绘制文本
.drawText()---绘制文本
参数1;文本内容
参数2,3:文本的x,y坐标