是否可以仅绘制路径的一部分?假设我的Path是从x = 0到x = 2000,整个Path在start时计算,Canvas放在HorizontalScrollView上。当滚动x = 500时,我想仅绘制该路径的500到1000;当x = 0时绘制0到1000,当x = 1500时,绘制1000到1500,当x = 2000绘制1000到2000时。
路径是一条贝塞尔曲线,因此如果需要一直进行计算,那么就会对性能造成损害。
感谢。
答案 0 :(得分:1)
我可能会给你一个答案。
Picture类用于存储不会更改的图片,然后将它们写入画布。
例如,您可以拥有4个不同的Picture对象,每个对象都有Bezier曲线的一部分,然后在您需要时写入它们。
某些代码可能如下所示:
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次,但我只是张贴我所知道的作品。如果你能找到一种分区画布的方法,那么你只需要绘制一次。
答案 1 :(得分:1)
通过绘制整条线来获得解决方案,之后计算Rect以在其上绘制,以隐藏可见部分上的特定部分。
这是为了演示我是如何做到这一点的,我正在绘制整个Path,为了得到它的剪辑,我在它上面绘制一个矩形到屏幕的右边位置,所以它看起来像是剪辑路径。
答案 2 :(得分:1)
您可以为此使用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)