【自定义View】学习笔记

当前的UI和开源库开源实现大多效果,但自定义View可以更灵活的达到需求

  1. 布局
  2. 绘制
  3. 触摸反馈
    在这里插入图片描述

一:Canvas与Paint结合

在这里插入图片描述
在这里插入图片描述

1. 简而言之,Canvas绘制形状(范围裁切,几何变形),Paint加特效(颜色,风格,拐角形状等等)

  1. Canvas 类下的所有 draw- 打头的方法,例如 drawCircle() drawBitmap()
  2. Paint类的几个最常用的方法
    Paint.setStyle(Style style) 设置绘制模式
    Paint.setColor(int color) 设置颜色
    Paint.setStrokeWidth(float width) 设置线条宽度
    Paint.setTextSize(float textSize) 设置文字大小
    Paint.setAntiAlias(boolean aa) 设置抗锯齿开关

2.样例

  1. 绘制圆形
    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)
    }
    
}
  1. 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)
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.画方块,画点,画线
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
批处理
在这里插入图片描述
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 有两类方法,一类是直接描述路径的,另一类是辅助的设置或计算。
牛逼

猜你喜欢

转载自blog.csdn.net/qq_38304672/article/details/112801522