2012-02-29 6 views
27

拡張ビューでいくつかのコードをセットアップすると、縮尺が簡単な(ベクターのような)いくつかの図面があります。ペイントがストロークに設定されている場合、Android Canvas.drawTextOnPathが正しく表示されない

塗りつぶしをFILLに設定すると、パスに描かれたテキストは正しく見えますが、塗りをストロークに設定すると気付きました(私はちょうどテキスト)は、LSD旅行にあるように見えます。私は、私は下の画像を取得するストロークにFILLからPaint.Styleを変更した場合は

Paint yellowPaint = Paints.getFillTextPaint(0.01f, 0xFFffea3e, 0.065f); 
    canvas.drawTextOnPath(mContext.getString(R.string.building_a_partnership), 
      Paths.getRoundedTextPath(mOuterCircleRectF, 280f, 350f), 
      0, -0.025f, yellowPaint); 

public static Paint getFillTextPaint(float f, int color, float textSize) { 
     Paint textPaint = new Paint(); 
     textPaint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     textPaint.setStyle(Paint.Style.FILL); 
     textPaint.setColor(color); 
     textPaint.setTextSize(textSize); 
     textPaint.setStrokeWidth(f); 
     textPaint.setShadowLayer(0.002f, 0.0f, 0.0f, 0xFF000000); 
     textPaint.setTypeface(Typeface.SANS_SERIF); 
     return textPaint; 
    } 

:ここに私のサンプルコードです。私canvas.drawText()を使用して、それは細かい文字を表示するうまく動作します。それがパスに適用されたときだけ、それはすべて奇妙になるようです。

Fill Image

Stroke Image

+0

'drawTextOnPath'は、ハードウェアアクセラレーションをオンにしてサポートされているキャンバス操作ではない可能性があります。 http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html –

+0

ありがとうローマをチェックしてみてください。 – Chrispix

+0

したがって、このinstance.setLayerType(View.LAYER_TYPE_SOFTWARE、null)を試しました。 drawTextOnPathを実行した後、instance.setLayerType(View.LAYER_TYPE_HARDWARE、null)を実行しました。 - 同じことをしますか? – Chrispix

答えて

0

どうやらこれは、私のスケールファクタが0-1であるという事実に..サイズ< 1.0でストロークをレンダリングの処理方法/ wのバグがあるように思われます。推奨される解決策は、0〜100の位取りを使用することです。

関連する問題