扉
当前的UI和开源库开源实现大多效果,但自定义View可以更灵活的达到需求
- 布局
- 绘制
- 触摸反馈
一:Canvas与Paint结合
1. 简而言之,Canvas绘制形状(范围裁切,几何变形),Paint加特效(颜色,风格,拐角形状等等)
- Canvas 类下的所有 draw- 打头的方法,例如 drawCircle() drawBitmap()
- Paint类的几个最常用的方法
Paint.setStyle(Style style) 设置绘制模式
Paint.setColor(int color) 设置颜色
Paint.setStrokeWidth(float width) 设置线条宽度
Paint.setTextSize(float textSize) 设置文字大小
Paint.setAntiAlias(boolean aa) 设置抗锯齿开关
2.样例
- 绘制圆形
1)图形
2)代码
class CircleView:View {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
var paint: Paint = Paint()
protected override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
// 绘制一个圆 对应,圆心x,y坐标及半径画笔
canvas.drawCircle(300F, 300F, 200F, paint)
}
}
- Canvas.drawColor(@ColorInt int color) 颜色填充
1)drawColor(Color.BLACK) 会把整个区域
染色,覆盖掉原有内容;
2)drawColor(Color.parse("#88880000") 会在原有的绘制效果上加一层半透明的红色遮罩。
3)设置填充风格,有三种,实心 线条 实心+线条
protected override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
paint.setStyle(Paint.Style.STROKE)
paint.setColor(Color.BLUE)
// 绘制一个圆
canvas.drawCircle(300F, 300F, 200F, paint)
}
批处理
drawPath(Path path, Paint paint) 画自定义图形
这个方法有点复杂,需要展开说一下。
前面的这些方法,都是绘制某个给定的图形,而 drawPath() 可以绘制自定义图形。当你要绘制的图形比较特殊,使用前面的那些方法做不到的时候,就可以使用 drawPath() 来绘制。
drawPath(path) 这个方法是通过描述路径的方式来绘制图形的,它的 path 参数就是用来描述图形路径的对象。path 的类型是 Path ,使用方法大概像下面这样:
public class PathView extends View {
Paint paint = new Paint();
Path path = new Path(); // 初始化 Path 对象
......
{
// 使用 path 对图形进行描述(这段描述代码不必看懂)
path.addArc(200, 200, 400, 400, -225, 225);
path.arcTo(400, 200, 600, 400, -180, 225, false);
path.lineTo(400, 542);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path, paint); // 绘制出 path 描述的图形(心形),大功告成
}
}
Java
Path 可以描述直线、二次曲线、三次曲线、圆、椭圆、弧形、矩形、圆角矩形。把这些图形结合起来,就可以描述出很多复杂的图形。下面我就说一下具体的怎么把这些图形描述出来。
Path 有两类方法,一类是直接描述路径的,另一类是辅助的设置或计算。
牛逼