0

drawLine() でアルファグラデーションを使用して彗星を描画しようとしましたが、この画像のように線が完全に接続されません。

http://s14.postimg.org/y5w6pgl6p/Scr​​eenshot_2013_07_09_16_14_21.png

パスは、S 字または C または (動き続ける) のようなものである可能性があります。

このコードを使用して:

paint.setStrokeJoin(Paint.Join.BEVEL);
paint.setStrokeWidth(20);
paint.setShader(new LinearGradient(100,200,150,200, 0x00ffff00,0x44ffff00, Shader.TileMode.CLAMP));
canvas.drawLine(100, 200, 150, 200, paint);
paint.setShader(new LinearGradient(150,200,200,220, 0x44ffff00,0x88ffff00, Shader.TileMode.CLAMP));
canvas.drawLine(150, 200, 200, 220, paint);
paint.setShader(new LinearGradient(200, 220, 230, 230, 0x88ffff00, 0xccffff00, Shader.TileMode.CLAMP));
canvas.drawLine(200, 220, 230, 260, paint);
paint.setShader(new LinearGradient(230, 230, 230, 280, 0xccffff00, 0xffffff00, Shader.TileMode.CLAMP));
canvas.drawLine(230,260,230,310,paint);

setStrokeJoin() は drawLine/s では役に立ちませんでした

線をパスに変換しましたが、グラデーションがパス全体で曲線を描いていませんでした

また、線の代わりに図形を描画して、それらの間の空白を埋めますが、アニメーション化された線を描画するには多くの時間と CPU が必要でした。

他のアイデアはありますか?

4

1 に答える 1

1
Path path = new Path();
path.moveTo(100, 200);
path.lineTo(150, 200);
path.lineTo(200, 220);
path.lineTo(230, 260);
path.lineTo(230,310);
Paint paint = new Paint();
paint.setShader(new LinearGradient(100,200,230,310, 0x00ffff00,0x44ffff00, TileMode.CLAMP));
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(50);
canvas.drawPath(path, paint);

それが役に立てば幸い!

于 2013-07-25T10:06:52.207 に答える