Android 多边形导圆角(Path画折线导圆角)

该文章介绍了一个Android工具类SimplePath,用于帮助开发者在使用Path绘制折线时添加圆角效果。通过贝塞尔曲线,可以为三角形、矩形等多边形的各个角设置圆润过渡。API包括设置起点、终点圆角、计算线上点坐标等功能,适用于创建带有圆角效果的图形。

前言:用path画折线,2条线相交处导圆角

简介:为开发者提供工具类,方便对使用path画折线设置圆角。使用path画多边形,如三角形、矩形、平行四边形等,同时设置圆角。另外提供计算直线上某点坐标。

实现原理

三个点,2条直线相交,给中间点连接处导圆角。设圆角半径为radius,  三个点分别为p2, p3,p1,  如下图所示:给p3点处导圆角。先求出导圆角处连接的2点p4、p5坐标,再用path连接p2和p4,然后通过p4、p3、p5绘制贝塞尔曲线连接p4、p5两个点,最后连接p5、p1两个点。
总结:计算圆角的起始和结束点,使用贝塞尔曲线绘制圆角。


API使用:
 

三角形导圆效果如下:

 导圆角之后

 调用api如下

        int r = 22;//圆角尺寸
        Path path = SimplePath.buildle()
                .moveTo(50, 50, r, r)//起始点
                .lineTo(200, 50, r, r)
                .lineTo(200, 250, r, r)
                .close()//结束,完成三角形
                .build();

矩形导圆角

Path path = SimplePath.buildle()
        .addRect(50, 50, 200, 250, r)
        .build();
 

其它API使用:

获取线上点坐标   public static float[] getOnLinePointLocationEnd(float lenght, float x1, float y1, float x2, float y2)
示例:上述实现原理中,计算圆角起始坐标点p4. 
float[] p2f = SimplePath.getOnLinePointLocationEnd(r,x1,y1,x2,y2);
Point p2 = new Point(p2f[0], p2f[1]);
其中r在这里是圆角半径,表示圆角起始点p4与中间点p2之间的距离。


​​​​​​​画线并添加圆角 (绘制的线是起始点到圆角结束点的路径,并不包含到第三点路径)  public static void lineToAndCorner(Path path, float startRadius, float endRadius, float x1, float y1, float x2, float y2, float x3, float y3) 

示例:上述实现原理中,如果给p3点导圆角r.

path先要自行设置起始点p2,  然后

SimplePath.lineToAndCorner(path, r, r, p2.x, p2.y, p3.x, p3.y, p1.x,p1y);

绘制的线是 p2到p4,再到p5的路径, 不包含,p5到p1的路径。目标点是中间点p3.

备注:方法参数详情请查阅源码

源码:

package com.ttkx.deviceinfo.bkchart;


import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;

import java.util.ArrayList;
import java.util.List;

public class SimplePath {

    public static Buildle buildle() {
        return new Bui
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值