2

パスの一部だけを描画することはできますか? 私のパスが x = 0 から x = 2000 までで、パス全体が開始時に計算され、キャンバスが Horizo​​ntalScrollView に配置されているとします。スクロール x = 500 の場合、そのパスの 500 から 1000 までのみを描画します。x = 0 の場合は 0 から 1000 を描画し、x = 1500 の場合は 1000 から 1500 を描画し、x = 2000 の場合は 1000 から 2000 を描画します。

パスはベジエ曲線であるため、計算を常に実行する必要があると、パフォーマンスが低下します。

ありがとう。

4

3 に答える 3

1

線全体を描画して解決策を取得し、その後、Rectを計算してその上に描画し、表示されている部分の特定の部分を非表示にします。

ここに画像の説明を入力してください

これは、これをどのように行ったかを示すためのものです。パス全体を描画し、クリップを取得するために、その上に画面の正しい位置に長方形を描画します。これにより、パスがクリップしているように見えます。

于 2012-11-16T06:47:48.347 に答える
1

答えがあるかもしれません。

Picture クラスは、変更されない画像を保存し、キャンバスに書き込むために使用されます。

たとえば、それぞれがベジエ曲線の一部を持つ 4 つの異なる Picture オブジェクトを用意し、必要なときにそれらを書き込むことができます。

一部のコードは次のようになります。

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 回だけ描画する方法がありますが、動作することがわかっているものを投稿しているだけです。キャンバスを分割する方法を見つけることができれば、一度描画するだけで済みます。

于 2012-11-15T20:54:19.413 に答える