Android 自定义绘制 小知识点


前言

记录一些自定义绘制时的小知识点,包括Canvas、Path、Paint、PathMeasure 等工具类。


1. Path在调用addCircle()、addArc()等方法时,需要传一个Direction参数

public void addCircle(float x, float y, float radius, @NonNull Direction dir) {
    isSimplePath = false;
    nAddCircle(mNativePath, x, y, radius, dir.nativeInt);
}

public void addArc(@NonNull RectF oval, float startAngle, float sweepAngle) {
    addArc(oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle);
}

Direction是个枚举,有两个值,用来表示这个路径的绘制方向
CW : 顺时针
CCW : 逆时针

2. Path有一个属性fillType,用来表示填充方式

public void setFillType(@NonNull FillType ft) {
    nSetFillType(mNativePath, ft.nativeInt);
}

FillType 是个枚举,有四个值
WINDING : 根据图形的绘制方向,任一点发出的射线与顺时针方向相交+1,逆时针方向相交-1,和为0则为填充,不为1则是镂空
EVEN_ODD : 不管绘制方向,任一点发出的射线与图形的交点,如果是奇数为填充,偶数为镂空
INVERSE_WINDING :与WINDING相反
INVERSE_EVEN_ODD :与EVEN_ODD相反

借用一张网图:
在这里插入图片描述

3. PathMeasure,Path的测量工具类

//path如果改变,需要调用setPath重新设置,第二个参数为是否将首尾连接闭合
val pathMeasure = PathMeasure(path, false)
//Path的长度
pathMeasure.length
//获取path中距离起点distance的点的坐标和正切值,存到Matrix中
val matrix = Matrix()
pathMeasure.getMatrix(
    5f,
    matrix,
    PathMeasure.POSITION_MATRIX_FLAG and PathMeasure.TANGENT_MATRIX_FLAG
)
//获取Path中距离起点distance的点的坐标和正余弦值
val pos = FloatArray(2)
val tan = FloatArray(2)
pathMeasure.getPosTan(5f, pos, tan)

4. Paint有个属性pathEffect,用来设置Path的效果

例如使用PathDashPathEffect来画虚线

public PathDashPathEffect(Path shape, //虚线的形状
						  float advance, //前置量
						  float phase, //间隔
                          Style style //Style, 分为 TRANSLATE ROTATE MORPH
                          ) {
    native_instance = nativeCreate(shape.readOnlyNI(), advance, phase, style.native_style);
}

5. Paint有个属性xfermode,用来设置图形的融合模式

public Xfermode setXfermode(Xfermode xfermode) {
    return installXfermode(xfermode);
}

目前,Xfermode只有一个子类,就是PorterDuffXfermode类,构造函数中需要传入一个PorterDuff.Mode参数。
这个Mode有以下类型
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ByeMoon丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值