パス上のテキストの描画についていくつかのテストを行います。キャンバスにビットマップを設定して背景画を作りました。次に、canvas へのパスにテキストを描画し、マトリックスで回転させます。コードを短くしなければならないので、長すぎるので重要な部分だけ掲載します。以下に示すこの画像は gimp でトリミングされているため、サイズの違いに悩まされないでください。私の Rect、Path、Matrix オブジェクト:
RectF drawTextOval;
Path drawTextPath;
Matrix mDrawnMatrix;
今、これは円のパスにテキストを描画するために私がやっていることです:
drawTextOval.set(drawTextPosX - drawTextArc, drawTextPosY
- drawTextArc, drawTextPosX + drawTextArc, drawTextPosY
+ drawTextArc);
drawTextPath.addArc(drawTextOval, 0, 360);
drawTextPath.computeBounds(drawTextOval, true);
mDrawnMatrix.postRotate(drawTextArcStart,
(drawTextOval.right + drawTextOval.left) / 2,
(drawTextOval.bottom + drawTextOval.top) / 2);
drawTextPath.transform(mDrawnMatrix);
patternCanvas.drawTextOnPath(drawText, drawTextPath, 0, 0,
mFixedTextPaint);
この時点までは、すべて問題ないように見えます。
しかし、画面全体を保存した後、回転したテキストは保存された .png 画像で歪んで見えます。他のすべてのコンポーネントは良さそうです。線形または角度のあるテキストを使用して、他の図面をいくつか作成しましたが、これはすべて機能します。キャンバスと背景画像に描画するいくつかの .png ビットマップでさえ...すべて正常に見えます。ただし、円パス上に描画されたテキストは次のようになります。
ビットマップのスケーリングは行わず、キャンバス イメージを次のように保存するだけです。
FileOutputStream fos = new FileOutputStream(saveFile);
this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
Bitmap bitmap = this.getDrawingCache();
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
テキストがゆがんで見えるのはなぜですか? 誰かが私の間違いを見ますか?前もって感謝します...
編集
いくつか試してみたところ、密度をfalseに設定するか、マニフェストでハードウェアアクセラレーションを無効にすると、保存する前に実行時に効果が表示されることがわかりました。これは、ビットマップを getDrawingCache() で保存すると、現時点ではスケーリングが無効になっていることを示唆しています。しかし、なぜ?
私が最後に見つけたのは、曲率が低いほどテキストのスケーリングが低いということです。文字が少しだけ曲がっていれば良さそうです。