2012/07/11

Canvas.drawLine()でコケる

これは GPU アクセラレーションを有効にした Android 4.0.3 のエミュレータ上でのみの話。

Canvas.drawLine()でコケる

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
PointF ptOrigin = new PointF(50.5f, 50.5f);

paint.setColor(0xff000000);
paint.setStrokeWidth(5);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
canvas.drawLine(ptOrigin.x, ptOrigin.y, ptOrigin.x + 200, ptOrigin.y + 25, paint);
ウチではこのコードを実行すると、確実にエミュレータがコケる。
座標や線の幅などは関係ないみたい。
何をどうやってもコケる。

回避策

エミュレータの設定を色々変えてみたけど、設定で回避できる方法はまだ見つかってない。
どなたかご存じないですかね。
というか、同じ現象は他で出てないんかな?

エミュレータに合わせて、コードを変更するのは本末転倒なのは重々承知の上で。
次のように Path を使って線分を引くと不思議とうまくいく。
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
PointF ptOrigin = new PointF(50.5f, 50.5f);

Path path = new Path();
path.moveTo(ptOrigin.x, ptOrigin.y);
path.lineTo(ptOrigin.x + 200, ptOrigin.y + 25);

paint.setColor(0xff000000);
paint.setStrokeWidth(5);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path, paint);

0 件のコメント:

コメントを投稿