gpt4 book ai didi

android - 不渲染转换后的路径

转载 作者:行者123 更新时间:2023-11-29 15:24:10 26 4
gpt4 key购买 nike

我不确定我是否在 Android 中发现了错误,或者我的代码中是否存在错误。我认为这可能是硬件的另一种(或新的)表现形式 acceleration bug我读过。我在 android 4.2 上运行,但设置 android:hardwareAccelerated="true"在 list 文件中并不能解决问题。

问题存在于自定义 View 中。它有一个复杂的显示,而不是指定所有 Path我分别解析一个 SVG 文件并根据 <path> 的数据规范构建路径元素。 SGV 解析器还提取 SVG 绘图区域的宽度和高度,以便矩阵在 SVG 空间和 View 之间转换。可以生成空间:

Matrix t = new Matrix();

float scale = Math.min(viewWidth / svgWidth, viewHeight / svgHeight);
t.setScale(scale, scale);

此转换应用于 onDraw(Canvas) 中的 Canvas 方法。问题是有些路径可以渲染,有些则不能。沿路径呈现的文本也是如此。

我想我已经找到渲染和不渲染之间的区别:直线。正在呈现的文本在对角线上,没有呈现的文本在完全水平的线上。将文本路径从水平方向移开会导致呈现文本。将水平线更改为控制点位于直线本身的三次曲线也是如此——所以它呈现得像一条直线;从现在开始我将称之为直线。

如果边界框(翻译前或翻译后)的体积为零(boundingBox.left - boundingBox.right == 0boundingBox.top - boundingBox.bottom == 0),Android 加速代码是否会过滤掉路径?或许!但是我还有其他不渲染路径的情况:路径仅由直线组成。即使这些路径的边界框有体积,它们也不会渲染。将其中一个路径元素从直线更改为直线,整个路径渲染得很好。

当然,从性能的角度来看,我不想将某些线条渲染为直线,我假设线条绘制代码比三次曲线绘制代码更快。所以我发布此消息是为了询问是否有其他人遇到过此问题以及是否有解决方法。

一如既往的感谢。

最佳答案

我刚刚发现我必须关闭()一个路径才能让它在某些设备/模拟器上呈现——即使它只是一个现有的、封闭的路径的转换版本,事实上,即使它是只是直接从现有路径创建的新路径。

例如,Path thisIsInvisible = new Path(existingClosedPath);existingClosedPath 可以在我的 Canvas 上很好地绘制。 thisIsInvisible 会默默地不显示。但是如果我在创建它之后立即调用 thisIsInvisible.close(),它就可以正常工作。

我还找到了一个 interesting post from Romain Guy建议在启用硬件加速的情况下,最好使用 addPath() 来完成与 transform() 相同的工作。

关于android - 不渲染转换后的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com