自定义View控件---基础

现已有的控件
TextView
BUtton---继承了TextView
CheckBox--继承了button
radioBUtton
progressBar
singbar(评论星星)

自定义控件的定义:
Android本身没有提供,需要开发者自定义设计的控件


自定义控件的三种定义形式:
流程:
1.继承已有控件---如Button
2.继承View
3.继承ViewGroup--如RelativeLayout,LinearLayout

使用原因:
现有控件已经满足不了用户需求

自定义View简要步骤:
自定义View的计算机流程:
  1. 准备工作(加载阶段)---构造方法
    1. 定一个类继承VIew或者View的子类
    2. 处理View的构造方法--->View的构造方法
  2. 测量规划大小(测量阶段)--onMeasure()

  3. 绘制位置(布局阶段)--onLayout()
  4. 画(绘制阶段)--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坐标






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值