学习目的
学习控件的自定义操作之一——绘画;尝试绘画出一些系统没有的或自己需求的控件。
学习过程
掌握运用绘画的方式,自定义控件,写一些有趣的自定义视图。
技术
一、绘制自定义控件三要素:
1.画布(canvas):承载绘画要素
2.画笔(Paint):设置绘制的一些参数
//实例化对象,转为矢量图
Paint paint =new Paint(Paint.ANTI_ALIAS_FLAG);
//设置线条颜色(灰色)
paint.setColor(Color.GRAY);
//设置空心(不填充)
paint.setStyle(Paint.Style.STROKE);
//设置线条粗细(25)
paint.setStrokeWidth(25);
//设置图形起锋和提锋(圆角)
paint.setStrokeCap(Paint.Cap.ROUND);
...
3.路径(Path):设置绘制的路径图形
//实例化对象
Path mPath =new Path();
//设置路径的起始点
mPath.moveTo(50,150);
//画线
mPath.lineTo(450,150);
//画贝塞尔曲线
//way1
mPath.cubicTo(50,500,200,300,350,500);
mPath.cubicTo(500,700,650,300,850,200);
//way2
mPath.moveTo(50,500);
mPath.quadTo(200,300,350,500);
mPath.quadTo(500,700,650,500);
二、系统自调用的几个方法
要正确把握代码的写入时机,则必须要明确如下几个方法的系统调用顺序和作用:
1.类继承的抽象方法
调用初始化的方法
2.onMeasure( )方法
测量控件的尺寸
3.onSizeChanged( )方法
控件的尺寸确定好了
4.onDraw( )方法
具体绘制
三、实战:饼状铺满、仪表盘加载、水波动画和水波加载
Step1:自定义控件新建一个类,继承于View,实现其抽象方法
Step2:绘制
1.饼状图
来看看效果先:
xml实现:
java实现:
1>使自定义控件拥有xml和java两种使用方法的实现:
2>绘制三步走:画布、画笔和路径
3>为使绘画动画连贯顺滑,采用ValueAnimator由系统计算绘画的间隔与时间:
4.1>通过xml使用自定义控件:
4.2>通过java使用自定义控件:
2.仪表盘加载
先看看效果啥样子:
因为第一个实战例子已经讲过了java创建和使用自定义控件,所以这里仅用xml的方式:
1>同样的绘制三步走:画布、画笔和路径
2>通过点击事件来模拟该仪表盘加载
3>最后别忘记了在xml中配置该自定义控件
其中需要注意的是,进度文本的位置计算和重绘进度值的判断条件。
3.水波加载
待更新...
感悟
通过自定义控件的进一步学习,自己对其的理解有深入了几分。自定义控件是提供给自己或者他人使用的工具,具有其针对性,实用性,灵活性。上述实战项目都比较简易,但能够体现自定义控件的一些基础的实现思路。整个过程我的思考历程还是较为顺畅,基本没有卡壳的地方,不过还是得戒骄戒躁,继续学习。