- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要快速绘制线条(~10k/帧是常见数量)。绘制这些线条的已知方法(单线程、抗锯齿):
drawLines()
带有硬件加速的 Canvas
。速度很快,但线条变得抗锯齿模糊(见下图)。此外,在 KitKat
上,如果点数组包含 NaN
值drawLines()
与软件呈现 Canvas
。速度适中,没有模糊,KitKat
问题依然存在for (int i ...) drawLine()
使用硬件加速 Canvas
。列出的三个中最慢的,没有模糊,没有 KitKat
问题有些事情告诉我有几个简单的技巧可以避免抗锯齿和 KitKat
问题,从而保持高性能
对于第一个 - 例如,是否可以绘制那些未抗锯齿的线条,然后对整个位图应用抗锯齿(最快选项的变体)?
对于第二个 - 没有想法,只有一些处理 NaN
的微调方法。无论如何,KitKat
是一个相对较新和流行的 - 它的问题应该有一些解决方案 - 否则该平台使用起来会很头疼
UPD2:
这个问题包含两个不同的问题:
- 使用硬件加速和任意(但有效)输入的 drawLines()
时抗锯齿
- 如果输入包含 NaN
drawLines()
拒绝在
KitKat
上绘制任何内容
drawLines()
是焦点,因为它比使用 drawLine()
一条一条地绘制线条快方式
另外,下图是对同一个数组应用drawLines()
两次的结果:
canvas.drawLines(toDraw, 0, qty, paint);
canvas.drawLines(toDraw, 2, qty-4, paint); //qty % 4 == 0
更新:
这就是模糊的样子。它在线路的末端
最佳答案
这里的话题很乱;让我们试着解开它们。
线条“模糊”
根据我们的聊天记录,此问题只会在您开始绘制长度 < 1 像素的线段时出现。值得注意的是,drawLines()
将一次分割所有线段,并且由于集合中存在 <1px 线,分割器可能会折叠。这就是使用单独的 drawLine()
命令看不到“模糊”的原因;每个 drawLine()
仅分割您给它的部分,因此错误仅限于那些超小的部分(无论如何都太小了)。 这里的修复是添加一些逻辑来从你的集合中删除 <1px 长度的线,这将解决这个问题,并允许你使用 drawLines()
比其他方法更快。
NaN 问题
NaN 会在 GPU 上引起很多问题,因此如果它们包含在您的绘图列表中,您就会看到问题是有道理的。 (很像导致模糊问题的 <1px 线段)。同样,这就是为什么使用单独的 drawLine()
命令看不到视觉问题; NaN 正在破坏 tesselator,并将其仅隔离到那些单个段,而不是整个行列表。同样,此处的解决方案将指向过滤列表以删除 NaN。
性能
鉴于镶嵌一条线的开销明显大于 CPU 检查以丢弃一条坏线,因此添加一个预处理以删除 NaN 和 <1px 线应该在您的性能预算之内是有意义的,并且会消除您看到的视觉问题。
关于android - 在 Android Canvas : dealing with antialiasing and KitKat's peculiarities 中快速绘制大量线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126549/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
Kitkat HCE(NFC) 设备可以与另一台 Kitkat HCE(NFC) 设备通信吗? 我想编写应用程序将数据从一台 Kitkat HCE(NFC) 设备传输到另一台 Kitkat HCE(N
我在 KitKat 上收到以下错误,但在 Android M 及更高版本上没有问题: 2145-2145/com.cafeapps.stroydownloader E/dalvikvm: Could
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
问题 我的应用程序支持 4.0+,它完全是关于文件处理的。它适用于除 Kitkat 之外的所有 Android 版本。 在 Kitkat 中,我的应用无法修改或写入 SD 卡中的任何文件。但我看到各种
我有一个从我的服务器转换时间的函数,它在 android api 24 上运行良好,但现在我在 KitKat (Api 19) 上进行测试,时间转换无法正常工作。两个设备接收相同的数据,但转换不一样。
到目前为止,当使用 LocationClient 获取用户的最后已知位置时,我没有遇到任何问题,例如在 Jelly Bean 上进行测试。 我有一部 KitKat 手机进行测试,我发现在设置 -> 位
该问题仅在使用新的 WebView 机制的 KitKat 上出现。 基本上我加载了 12 张图片,一张接一张地连续加载。我希望 WebView 加载一行中的所有图像并自动缩放 webView 以覆盖整
我正在开发一个类似于 SMS 黑名单/白名单的应用程序。它现在不是 SMS 应用程序。 目标是: 如果该号码在黑名单中,它会阻止用户接收/发送短信,并且不会出现在他的短信应用程序中。 如果号码在白名单
因此,在我正在构建的应用程序中,我获取手机中的所有联系人并将其显示在 ListView 中。一切正常,直到我将手机 (HTC One) 从 4.1.2 升级到 4.4.2。我不再获取联系人的图像/个人
我在我的应用程序中使用了开关小部件。当我在 Lollipop 上运行应用程序时,它运行良好。但是当我运行 kitkat 版本时,它会崩溃。 xml设计: switchdb.xml
我正在尝试加载图像。当我使用 API 18 或更低版本时,这很好用,但如果我使用 API 19 (Kitkat),则会出现安全问题......我不确定如何解决这个,但是 cursorloader 给我
我收到 Android 4.4.4 用户关于我的动画呈现奇怪问题的投诉。到目前为止,我没有收到任何其他 Android 版本的投诉。我也无法在模拟器中复制错误(或者在我的 Nexus 7 上,这两个投
大家好,我正在开发一个消息应用程序,并按照谷歌博客 link here 的所有说明进行操作 它工作得很好。但是当我的应用程序作为默认消息应用程序工作时我遇到问题我想将消息保存在我的应用程序数据库以及设
我正在尝试利用新的 KitKat 半透明系统栏,在我的应用背景中获得全屏图像。 我无法确定正确的设置来获得我想要的行为。现在,我有一个 ViewPager 和三个 Fragment,每个由一个 Rel
我在Play商店发布的一些应用在android 4.4和onwords上崩溃了 相同的应用程序可在其他版本的Android上使用。 这个问题与os或其他有关吗? 最佳答案 是的,问题与操作系统有关。从
在你降级之前,我知道当你用谷歌搜索时,有与这个主题相关的类似问题。甚至它已经在 Stackoverflow 中得到了多次回答。 然而,尽管我阅读了所有这些主题,但它们都没有解决我的问题。我的代码适用于
我有一个Recyclerview。在它的适配器中,这就是我所拥有的: @Override public void onBindViewHolder(@NonNull ViewHolder holde
我正在 imageView 中查看来自 url 的图像,该代码适用于 android lollipop 和较新版本,但不适用于 android Kitkat 和旧版本,它返回空白图像而不是 url图片
我真的试过了,广播接收器没有收到新的短信广播。我在我的手机 4.4.4 上运行,我只想收听传入的消息,也就是说。
我是一名优秀的程序员,十分优秀!