Canvas.drawArc() 工件

2024-01-05

我在自定义视图中在画布上绘制圆弧,如下所示。Paint and rectangle被定义在外部onDraw()并为了简单起见添加到其中。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    RectF rectangle = new RectF(60f, 60f, 480f, 480f);

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(0x40000000);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(120);

    canvas.drawArc(rectangle, 225f, 315f, false, paint);
}

When I run this code on Galaxy Nexus with 4.3, there are following artefacts. enter image description here

There is no such artefacts when running on Nexus 5 with 4.4.4 though. enter image description here

我仅通过(225f,315f)等角度和其他一些角度观察此类文物。大多数时候,弧线的形状是正确的。

有没有办法避免这些文物?

Update:我尝试使用软件、硬件和无层setLayerType()。文物改变了形式,但仍然存在。


我是 StackOverflow 新手,想添加评论但无法(积分不足),所以不得不将我的评论放在答案中!

一件奇怪的事情是,圆弧超出了指定的结束位置,在外侧有一条垂直的直线。内部终点似乎没问题。当然,这一行和其他混乱的行并不能说明问题的原因。

它似乎出现在结束角度为exactly90 度的倍数。这看起来像是一个数值计算错误、浮点数舍入问题等。@kcoppock 评论说 314.98f 已经规避了该错误。大概any除了 315.0f 之外的值也可以达到目的。

如果涉及代码优化(尝试以尽可能少的线段绘制圆弧),另一个可能有效的技巧是通过将圆弧切割成多个片段来简化圆弧 -> 使用多个 drawArc 调用,每个调用都跨越某个最大角度。候选角度为 30、45、90 和 180 度。关节是否会隐形还有待观察......

这是一个有点遥远的事情,希望这些建议中的任何一个都能奏效。

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

Canvas.drawArc() 工件 的相关文章

随机推荐

  • 为什么 Visual Studio 2010 中不允许进行更改?

    我正在从 VS 2008 升级到 VS 2010 并且大部分进展非常顺利 我遇到的一个问题是 如果我在代码中中断并尝试进行更改 我会收到一条错误消息 指出这是不允许的 这是我不能没有的事情 所以我希望它能够得到解决 否则我会继续使用 VS
  • “GenerateJavaStubs”任务失败

    目前 我因这个问题而头撞墙 该错误阻止我构建和运行我的应用程序 这是一个PCL项目 Error The GenerateJavaStubs task failed unexpectedly System IO PathTooLongExce
  • Facebook 开放图元标签最大内容长度

    有谁知道 Facebook 的每个开放图元标签的最大有效长度 元标签的描述http ogp me http ogp me 不列出最大长度 仅列出一般描述 例如 og description 元标记的 对象的一到两句话描述 据我了解 元标签一
  • 如何将 Spring-Boot Web 服务转换为 Docker 镜像?

    我想从 Docker 容器访问我的网站 但我不能 我试图实施的步骤如下 完成所有步骤后我无法访问http localhost 8080 index页面 我哪里出错了 Spring Boot 项目名称是demo 我的部分代码 package
  • 检查 YouTube 视频是否正在播放并运行脚本

    我在 WordPress 中嵌入了以下视频 它位于幻灯片中 我想在有人单击视频时停止该幻灯片 我不知道如何获得这行代码 self pauseAutoPlay true 在视频播放时运行 我迫切需要一些帮助 Edit 因为我不是最终用户 我需
  • 如何从外部网页引用 HTML

    对于这个基本问题 我提前表示歉意 我有网页 A 上面有指向网页 B 的链接 我需要找到网页 B 的链接 足够简单 然后将网页 B 中的 HTML 存储在我的 javascript 脚本的变量中 要存储网页 A 中的 HTML 我知道这很简单
  • Golang包内导入包

    去结构 main go users users go 这两个文件非常简单 main go package main import users func main resp users GetUser abcde fmt Println re
  • 应用程序不响应 Windows API 事件?

    我正在开发一个项目 我想使用 python 自动化 GUI 但是我尝试自动化的 Windows 程序不响应 pyautogui 鼠标点击 制作此应用程序的公司是否有可能故意阻止 Windows API 事件 我试图自动化的特定程序是 Bla
  • Nodejs、TypeScript、ts-node-dev 和顶级等待

    在需要顶级等待之后 我现在花了一个小时寻找新错误的解决方案 到目前为止我尝试过的所有其他内容都没有解决错误 例如添加 type module 到 package json 文件 错误消息是Cannot use import statemen
  • .wav 和 .gsm 文件格式有什么区别

    我正在学习星号 在此我曾使用过语音邮件应用程序 当我尝试播放语音邮件时 我看到了以下格式的文件 wav WAV gsm 以上文件格式有什么区别 有信息关于星号维基 http www voip info org tiki index php
  • 如何在 T-SQL 中转义百分号?

    This 问题也有答案 https stackoverflow com questions 700648 escape percentage sign db2 sql 但它特别提到了 DB2 我如何搜索string using LIKE已经
  • 无法使用selenium webdriver + firefox下载PDF

    我有一个 selenium 脚本 作为其执行的一部分 需要下载 PDF 并且下载是必要的 因为稍后会使用 PDF 我已经使用配置文件首选项方法来下载文件 这在我用于开发的虚拟机上运行良好 但是当将脚本移动到实时服务器时 它似乎不想下载所需的
  • 应用程序因 EXC_BREAKPOINT 错误而崩溃

    我正在 Xcode 7 2 中制作一个应用程序 我有一个带有按钮的主菜单 该按钮有一个转到设置视图控制器的序列 设置视图控制器具有以下代码 每次我到达该视图控制器时 它都会因 EXC BREAKPOINT 错误而崩溃 有趣的是 这种情况只发
  • 如何修复调试中的 ClassNotFoundException: kotlinx.coroutines.debug.AgentPremain?

    我正在运行几个项目作为 Spring Boot 应用程序 其中一个项目特别无法启动并抛出 java lang ClassNotFoundException kotlinx coroutines debug AgentPremain at j
  • 最先进的 Java EE 调试和监控工具

    多年来我第一次深入研究 Java EE 我正在寻找有关 Java EE 调试和监视工具的建议 IDlike找到一个可以让我动态探索线程空间等的工具 我主要使用 Tomcat update 和 Java 5 老鼠 如果您无法使用VisualV
  • 选择表中除表标题行之外的行

    如何使用jquery选择html表格中除表格标题行之外的行 table thead tr th Foo th td Lorem td td Ipsum td tr thead tr th th tr table
  • 如何使用 angularjs 输入文本并渲染 html?

    我想将文本框绑定到 angularjs 变量 并让它在单独的 div 中输出渲染的 html I have div div
  • 我们可以将 Github mac 应用程序与 GitLab 一起使用吗?

    我喜欢 GitHub Mac 应用程序 我通过我的 GitHub 帐户使用它 我加入了一个 GitLab 项目 我想知道是否可以将 GitHub 应用程序与 GitLab 存储库一起使用 我找到了一个post https stackover
  • 作为特定复杂类型扩展的任何类型元素的 xsd 序列

    基本上 如果这是 NET 它会看起来像这样 ISomething string A get int B get var somethings new List
  • Canvas.drawArc() 工件

    我在自定义视图中在画布上绘制圆弧 如下所示 Paint and rectangle被定义在外部onDraw 并为了简单起见添加到其中 protected void onDraw Canvas canvas super onDraw canv