Android 不呈现已转换的路径

Android 不呈现已转换的路径,android,drawing,Android,Drawing,我不确定我是否在Android中发现了一个bug,或者我的代码中是否有bug。我想这可能是我所读到的硬件的另一种(或新的)表现形式。我运行的是android 4.2,但在清单文件中设置android:hardwareAccelerated=“true”并不能解决问题 该问题存在于自定义视图中。它有一个复杂的显示,因此我没有单独指定所有的路径字段,而是解析一个SVG文件,并根据元素的数据规范构建路径。SGV解析器还提取SVG绘图区域的宽度和高度,以便生成要在SVG空间和视图空间之间转换的矩阵: M

我不确定我是否在Android中发现了一个bug,或者我的代码中是否有bug。我想这可能是我所读到的硬件的另一种(或新的)表现形式。我运行的是android 4.2,但在清单文件中设置
android:hardwareAccelerated=“true”
并不能解决问题

该问题存在于自定义视图中。它有一个复杂的显示,因此我没有单独指定所有的
路径
字段,而是解析一个SVG文件,并根据
元素的数据规范构建路径。SGV解析器还提取SVG绘图区域的宽度和高度,以便生成要在SVG空间和
视图
空间之间转换的矩阵:

Matrix t = new Matrix();

float scale = Math.min(viewWidth / svgWidth, viewHeight / svgHeight);
t.setScale(scale, scale);
此转换应用于
onDraw(canvas)
方法中的画布。问题是有些路径渲染正常,有些路径渲染不正常。沿路径渲染的文本也是如此

我想我已经找到了渲染和未渲染之间的区别:直线。正在呈现的文本位于对角线上,而不在对角线上的文本位于完全水平的文本上。将文本路径移离水平位置会导致渲染文本。同样,将水平线更改为三次曲线,控制点位于该线本身上,因此它呈现为一条直线;从现在起,我将称之为直线曲线

如果边界框(翻译前或翻译后)的体积为零(
boundingBox.left-boundingBox.right==0
boundingBox.top-boundingBox.bottom==0
),Android加速代码中是否存在过滤路径的缺陷?大概但我还有其他不渲染的路径:路径只由直线组成。即使这些路径的边界框具有体积,它们也不会渲染。将其中一个路径元素从一条直线更改为一条直线,则整个路径渲染效果良好

当然,从性能的角度来看,我不想把我的一些线条渲染成直线,我假设线条绘制代码比三次曲线快。所以我发布这篇文章是为了询问是否有其他人遇到过这个问题,以及是否有解决方法


非常感谢,一如既往。

在android 4.1.2版本上,我遇到了类似的路径转换问题。有些路径根本无法变换或绘制。
通过关闭硬件加速解决了这个问题。希望这将对将来的人有所帮助。

我刚刚发现,我必须关闭()一条路径,才能在某些设备/模拟器上进行渲染,即使它只是现有的已关闭路径的转换版本,事实上,即使它只是直接从现有路径创建的新路径

例如,
Path thisinvisible=新路径(existingClosedPath)-
existingClosedPath
可以在我的画布上画得很好<代码>此可视文件将不会自动显示。但是,如果我在创建它之后调用了
thisinvisible.close()
,它工作得很好


我还发现一个建议,在启用硬件加速的情况下,使用addPath()来完成与transform()相同的工作可能会更好。

您好,我也有类似的问题。请看我的问题:。这和你的问题相似吗?到目前为止还没有解决方案……硬件加速并不能解决问题……@Opiatefuch很可能是同一个问题。在路径接缝上调用translate(…)是个问题。感谢您的回复…所以您到目前为止没有解决方案?没有,我对其进行了编码以避免出现这种情况。我不确定这是系统错误还是我做错了什么。由于缺乏回应,我没有进一步的讨论。请看我上面链接的问题。通过旋转硬件加速,绘制的文本在运行时看起来是扭曲的,并调用getDrawingCatch()。通过启用该选项,它仅在保存图片时调用GetDrawingCatch()后才看起来扭曲,但在运行时不会。谢谢!这解决了我的问题。谷歌,这简直是愚蠢的。您需要使用new Path().addPath(Path,Matrix)来代替Path.transform(Matrix,null),然后解决它?为什么该死的Path.transform()函数一开始就不起作用?所以现在我必须在所有模拟器上测试我的应用程序,因为像这样愚蠢的错误?去他妈的安卓。