自定义视图 - 由线条绘制的圆角矩形的角

多明

我正在使用自定义视图,我想使用path.lineTo()path.arcTo()方法构建一个圆角矩形
所以,我想得到的矩形:

在此处输入图片说明

通常我用这个代码块绘制它:

    RectF backReftf = new RectF();
    Path path = new Path();
    int width = getWidth();
    int height = getHeight();
    float curve = (float) (0.1 *  height);
    RectF backReftf = new RectF();
    backReftf.left = 0;
    backReftf.top = 0;
    backReftf.right = width;
    backReftf.bottom = height;
    path.addRoundRect(backReftf, curve, curve, Path.Direction.CW);
    canvas.drawPath(path, paint);

但我想用path.lineTo()and来画这个path.arcTo()

根据 Docs about arcTo()

将指定的圆弧作为新轮廓附加到路径中。如果路径的起点与路径的当前最后一个点不同,则添加自动 lineTo() 以将当前轮廓连接到圆弧的起点。但是,如果路径为空,则我们使用圆弧的第一个点调用 moveTo()。

所以理论上我的弧应该从那里开始,线结束的地方,所以如果我画一条线(矩形的左侧):

    float curve = (float) (0.1 *  height);
    path.moveTo(0,0);
    path.lineTo(0, height - curve);

那么我的弧应该从这个点开始(0,高度 - 曲线),但是当arcTo()有以下参数时我在哪里传递这些参数:arcTo (float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean forceMoveTo)

另外我怎么在这种情况下计算startAnglesweepAngle

提前致谢!

恩特莱科

绘制圆弧时,您需要指定该圆弧的完整边界框,以及起点和扫掠角。我尝试从视觉上看到它们,如下所示:

更紧的角度

例如,当顺时针方向时,起始角位于距原点 180 度的位置。从 startAngle 开始,如果您顺时针扫描 90 度,您将到达所需的结束位置。

请注意原点、startAngle 和sweepAngle 在此图形中的位置。在 kotlin 中,它看起来像这样:

// Given some radius, viewWidth and viewHeight
override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        path.apply {
            moveTo(radius, 0F)
            lineTo(viewWidth - radius, 0F)
            arcTo(viewWidth - 2 * radius, 0F, viewWidth, 2 * radius, -90F, 90F, false)
            lineTo(viewWidth, radius)
            arcTo(viewWidth - 2 * radius, viewHeight - 2 * radius, viewWidth, viewHeight, 0F, 90F, false)
            lineTo(radius, viewHeight)
            arcTo(0F, viewHeight - 2 * radius, 2 * radius, viewHeight, 90F, 90F, false)
            lineTo(0F, radius)
            arcTo(0F, 0F, 2 * radius, 2 * radius, 180F, 90F, false)
        }

        canvas?.drawPath(path, linePaint)
    }

结果将是这样的:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中绘制自定义的圆角矩形?

来自分类Dev

自定义视图未绘制

来自分类Dev

绘制多个自定义视图

来自分类Dev

自定义视图不会绘制位图

来自分类Dev

在自定义Eclipse视图中绘制

来自分类Dev

绘制自定义视图的正确方法?

来自分类Dev

自定义视图:画布绘制方法给出API错误

来自分类Dev

自定义视图未绘制到屏幕范围之外

来自分类Dev

在android中的自定义图片视图上绘制

来自分类Dev

自定义视图未在GridLayout中绘制

来自分类Dev

调整自定义视图的报告尺寸以包括绘制的图形

来自分类Dev

Win32自定义绘制树视图控件

来自分类Dev

使用Android自定义视图实时绘制图

来自分类Dev

Android-测试自定义视图是否正确绘制?

来自分类Dev

Android的绘制自定义视图,如谷歌付费

来自分类Dev

如何通过使用自定义视图绘制位图

来自分类Dev

自定义视图到Toast中-不绘制

来自分类Dev

自定义视图按钮的onDraw()方法不会绘制

来自分类Dev

Android:以编程方式绘制自定义视图

来自分类Dev

自定义视图未在屏幕范围之外绘制

来自分类Dev

实现自定义绘制的NSMenuItem视图的简单方法

来自分类Dev

为什么没有绘制超出我的自定义视图边界的子视图?

来自分类Dev

使用Android在视图剪辑范围之外进行绘制时:如何防止底层视图在自定义视图之上绘制?

来自分类Dev

Swift UIView子视图不会在自定义UIView子类中变成圆角

来自分类Dev

在自定义面板上绘制线条/边框

来自分类Dev

可可编程:将矩形添加到自定义视图(NSView)

来自分类Dev

可可编程:将矩形添加到自定义视图(NSView)

来自分类Dev

如何创建可以动态接受角半径和颜色并相应更改的自定义按钮视图

来自分类Dev

防止自定义SurfaceView在其他视图之上绘制

Related 相关文章

  1. 1

    如何在Java中绘制自定义的圆角矩形?

  2. 2

    自定义视图未绘制

  3. 3

    绘制多个自定义视图

  4. 4

    自定义视图不会绘制位图

  5. 5

    在自定义Eclipse视图中绘制

  6. 6

    绘制自定义视图的正确方法?

  7. 7

    自定义视图:画布绘制方法给出API错误

  8. 8

    自定义视图未绘制到屏幕范围之外

  9. 9

    在android中的自定义图片视图上绘制

  10. 10

    自定义视图未在GridLayout中绘制

  11. 11

    调整自定义视图的报告尺寸以包括绘制的图形

  12. 12

    Win32自定义绘制树视图控件

  13. 13

    使用Android自定义视图实时绘制图

  14. 14

    Android-测试自定义视图是否正确绘制?

  15. 15

    Android的绘制自定义视图,如谷歌付费

  16. 16

    如何通过使用自定义视图绘制位图

  17. 17

    自定义视图到Toast中-不绘制

  18. 18

    自定义视图按钮的onDraw()方法不会绘制

  19. 19

    Android:以编程方式绘制自定义视图

  20. 20

    自定义视图未在屏幕范围之外绘制

  21. 21

    实现自定义绘制的NSMenuItem视图的简单方法

  22. 22

    为什么没有绘制超出我的自定义视图边界的子视图?

  23. 23

    使用Android在视图剪辑范围之外进行绘制时:如何防止底层视图在自定义视图之上绘制?

  24. 24

    Swift UIView子视图不会在自定义UIView子类中变成圆角

  25. 25

    在自定义面板上绘制线条/边框

  26. 26

    可可编程:将矩形添加到自定义视图(NSView)

  27. 27

    可可编程:将矩形添加到自定义视图(NSView)

  28. 28

    如何创建可以动态接受角半径和颜色并相应更改的自定义按钮视图

  29. 29

    防止自定义SurfaceView在其他视图之上绘制

热门标签

归档