Paint.setStrokeJoin 不适用于 canvas.drawLines

2024-01-12

我正在尝试使用绘制折线图canvas.drawLines(...),但线路似乎没有正确连接。据我了解使用Paint.setStrokeJoin应该使用斜接连接:

chartLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
chartLinePaint.setStyle(Paint.Style.STROKE);
chartLinePaint.setStrokeJoin(Paint.Join.MITER);
chartLinePaint.setStrokeWidth(6.0f);

如何解决此问题并使线条正确连接?


正如我在评论中告诉你的,Paint仅当您使用以下命令绘制对象时,对象才会被完全应用Path.

In drawLine https://developer.android.com/reference/android/graphics/Canvas#drawLine(float,%20float,%20float,%20float,%20android.graphics.Paint)文档中有一个段落:'样式在绘画中被忽略' 同样的事情也适用于drawLines method.

为了测试这一点,我创建了一个简单的自定义视图:

class CanvasTestView @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {

    private val textPaint1 = Paint(ANTI_ALIAS_FLAG).apply {
        style = Paint.Style.STROKE
        strokeJoin = Paint.Join.MITER
        strokeWidth = 12.0f
        color = Color.RED
    }

    private val textPaint2 = Paint(ANTI_ALIAS_FLAG).apply {
        style = Paint.Style.STROKE
        strokeJoin = Paint.Join.MITER
        strokeWidth = 12.0f
        color = Color.BLUE
    }

    @SuppressLint("DrawAllocation")
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)

        canvas?.apply {

            val floatArray = floatArrayOf(250f, 550f, 450f, 200f, 450f, 200f, 650f, 700f)
            drawLines(floatArray, textPaint2)

            val path = Path()
            path.moveTo(200f, 500f)
            path.lineTo(400f, 200f)
            path.lineTo(600f, 700f)
            drawPath(path, textPaint1)
        }

    }
}

结果是这样的:

所以使用drawLines部分应用样式Paintobj,喜欢颜色,但没有应用strokeJoin喜欢属性。drawPath似乎应用了所有这些。

如果您遇到性能问题,也许您可​​以尝试将结果缓存在某处,预先计算动画或尝试使用更简单的动画。

请记住,如果您没有特殊要求,则可以这样 很棒的图书馆:MPAndroid图表 https://github.com/PhilJay/MPAndroidChart已经有一些内置动画

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Paint.setStrokeJoin 不适用于 canvas.drawLines 的相关文章

随机推荐

  • Kubernetes 作业被创建但不会立即执行

    例如 创建如下所示的就业机会 apiVersion batch v1 kind Job metadata name test job sebas spec template spec containers name pi image per
  • OpenCV Mat 处理时间

    我想知道 OpenCV 函数的 src 源 和 dst 目标 使用不同的变量是否会对处理时间产生影响 我有下面两个函数 做同样的事情 public static Mat getY Mat m Mat mMattemp new Mat Img
  • Swift 2.0 中的 do { } catch 不会处理从这里抛出的错误

    更新 swift 2 0 后 我遇到了 do try catch 错误 如下图所示 我怎样才能解决这个问题 谢谢 该错误告诉您封闭的捕获并不详尽 这是因为自动生成的catch块只是捕获NSError对象 编译器无法判断是否有其他对象Erro
  • 变基以及变基推送提交意味着什么

    人们常说 您不应该对已经推送的提交进行变基 这可能意味着什么 To understand this we need to understand a bit about how git works A git repository is a
  • 如何使用 Jackson 和 Spring Boot 提供自定义反序列化器

    我有以下三个应用程序 项目1举行 业务逻辑 Spring Cloud Function 一个接口IDemo实体 项目2 AWS 特定的处理程序 一种实现IDemo实体 带有 DynamoDB 特定的注释 该项目基于Spring Boot 项
  • 如何在 chromedriver 中启用地理定位支持?

    我需要使用 Selenium 测试 JS 地理定位功能 并且我正在使用 chromedriver 在最新的 Chrome 上运行测试 现在的问题是 Chrome 提示我在测试期间启用地理定位 并且我不知道如何在运行时单击那个小栏 所以我拼命
  • Prolog:访问从父规则读取

    我想要一个特定的规则来读取 SWI Prolog 中的用户输入数据 例如 process do stuff read values do more stuff with X and Y here read values write Plea
  • 如何让自定义任务标签在 Eclipse 中工作?

    尝试了很多次 但我就是不知道如何在任务中定义自定义标签 我使用该对话框并创建了不同的内容 例如 TODO2 V2 或 TOVO 仅用于测试 但这些都不会扫描到任务 即使我做了类似 TODO2 或 源代码中的 V2 或 TOVO 我也尝试过重
  • 开始卡桑德拉——使用昆德拉?还有别的事吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正在接触 Cassandra 我们没有人对这个特定平台有任何经验 但都是 JavaEE JPA 等方面经验丰富的开发人员 我遇到了 Kund
  • Pivotal Cloud Foundry 登录问题

    我有一个 PWS 帐户 安装 Cloud Foundry 命令行界面 CLI 后 我尝试从 Windows 命令提示符 CYGWIN 终端和 Gitbash 登录 在上述所有情况下 我都无法登录cf login 但如果我发出命令 我就可以登
  • Grails - 将 UUID 渲染为 JSON

    我使用 UUID 作为我的域类的生成器 当我将域对象呈现为 JSON 时 id 如下所示 id class java util UUID leastSignificantBits 7570618374586820490 mostSignif
  • 在IIS中托管asp.net core应用程序,以便从网络内的其他PC访问

    如何在 Windows IIS 中托管我的 Asp Net Core 1 2 或 2 1 Web 应用程序 以便能够从本地网络 或我的虚拟操作系统 中的其他 PC 访问它 我的电脑是桌面 Windows 10 Pro 不是 Win Serv
  • C++0x 标准中对导出关键字的最佳解释是什么?

    我知道在最初的C 0x标准中有一个功能叫做export 但我找不到这个功能的描述或解释 它应该做什么 另外 哪个编译器支持它 尽管标准 C 没有这样的要求 但某些编译器要求所有函数模板都需要在使用它的每个翻译单元中可用 实际上 对于这些编译
  • 如何关闭 PDF 文件并重新创建它? (使用中的文件)

    我有一个可以创建 PDF 文件的 Java 应用程序 例如 我从程序创建一个简单的文件 我已经构建了代码来打开该文件 所以我创建了该文件 我看到了它 然后就可以了 如果我想修改该文件 我必须关闭该文件然后重新创建它 如果我不关闭该文件 则会
  • Internet Explorer 内容插件中的可编写脚本的对象

    虽然浏览器帮助程序对象有很多指南 但我很难找到有关如何为内容插件 即嵌入在网站中 实现可编写脚本的对象 即除了主控件之外 的资源 为了避免误解 问题是关于插件对象可能返回到网站中的脚本的可脚本化对象 例如来自方法调用 虽然我猜想这些的一般可
  • WPF - DataGridComboBoxColumn 示例

    我有一个包含 2 列的数据网格 一列包含角色信息 另一列应有一个包含可用用户列表的组合框 组合框中的数据与第一列中的数据无关 组合框没有数据上下文 只有项目源 而且我似乎也无法使用绑定 这一事实让我感到困惑 对于表中的数据和组合框中的数据使
  • 为什么我更喜欢使用向量而不是双端队列

    Since 它们都是连续的内存容器 在功能方面 双端队列几乎拥有向量所拥有的一切 但更多 因为在前面插入效率更高 为什么有人会更喜欢std vector to std deque 中的元素deque are not内存中连续的 vector
  • Js粘贴文件大小大于输入文件

    我用paste处理一张图片 图片只有3 6m 但是粘贴后变成了23m document addEventListener paste function event var items event clipboardData event cl
  • Apache Spark:客户端和集群部署模式之间的差异

    TL DR Spark Standalone集群中 客户端部署方式和集群部署方式有什么区别 如何设置我的应用程序运行的模式 我们有一个包含三台机器的 Spark Standalone 集群 所有机器都装有 Spark 1 6 1 主机 也是
  • Paint.setStrokeJoin 不适用于 canvas.drawLines

    我正在尝试使用绘制折线图canvas drawLines 但线路似乎没有正确连接 据我了解使用Paint setStrokeJoin应该使用斜接连接 chartLinePaint new Paint Paint ANTI ALIAS FLA