2

是否可以只绘制路径的一部分?假设我的 Path 是从 x = 0 到 x = 2000,整个 Path 是在 start 时计算的,Canvas 放在 Horizo​​ntalScrollView 上。当滚动 x = 500 时,我只想绘制该路径的 500 到 1000;当 x = 0 时,绘制 0 到 1000,当 x = 1500 时,绘制 1000 到 1500,当 x = 2000 时,绘制 1000 到 2000。

路径是贝塞尔曲线,因此如果需要一直进行计算,则会损害性能。

谢谢。

4

3 回答 3

3

您可以getSegment为此目的使用方法,如下所示(Kotlin):

private fun getSubPath(path: Path, start: Float, end: Float): Path {
    val subPath = Path()
    val pathMeasure = PathMeasure(path, false)
    pathMeasure.getSegment(start * pathMeasure.length, end * pathMeasure.length, subPath, true)
    return subPath
}

用法:

val subPath = getSubPath(path = originalPath, start = 0.2f, end = 0.8f)
于 2018-11-15T14:23:51.813 回答
1

我可能会给你一个答案。

Picture 类用于存储不改变的图片,然后将它们写入画布。

例如,您可以有 4 个不同的图片对象,每个对象都有部分贝塞尔曲线,然后在需要时编写它们。

一些代码可能看起来像这样:

Picture b1 = new Picture();
Canvas c1 = b1.beginRecording(500, height);
// draw
b1.endRecording();
Picture b2 = new Picture();
Canvas c2 = b2.beginRecording(500, height);
c2.translate(-500, 0);
// draw
b2.endRecording();
Picture b3 = new Picture();
Canvas c3 = b3.beginRecording(500, height);
c3.translate(-1000, 0);
// draw
b3.endRecording();
Picture b4; = new Picture();
Canvas c4 = b4.beginRecording(500, height);
c4.translate(-1500, 0);
// draw
b4.endRecording();

(if x < 500) {
    // draw c1
}
...

可能有一种方法只画一次,而不是 4 次,但我只是发布我知道的作品。如果你能找到划分画布的方法,那么你只需要绘制一次。

于 2012-11-15T20:54:19.413 回答
1

通过绘制整条线得到解决方案,然后计算 Rect 在其上绘制,以隐藏可见部分上的特定部分。

在此处输入图像描述

这是为了演示我是如何做到这一点的,我正在绘制整个路径,为了得到它的剪辑,我在它的顶部画了一个矩形到屏幕的正确位置,所以看起来路径正在剪辑。

于 2012-11-16T06:47:48.347 回答