不需要的變形效果在路徑android上繪製文字
我在路徑上繪製文字做一些測試.我通過將點陣圖設定為畫布來製作了背景圖片.然後,我在畫布上繪製文字,按矩陣旋轉.我必須縮短程式碼,我只會發布重要的部分,因為它太長了.下面顯示的影象是用gimp剪裁的,所以不要因為不同的大小而煩惱.我的矩形,路徑和矩陣物件:
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();
為什麼文字看起來扭曲?有沒有人看到我的錯誤?提前致謝….
編輯
我嘗試了一些東西,發現設定anyDensity為false或禁用硬體加速在Manifest將顯示在執行時的效果在儲存之前.這對我來說,當使用getDrawingCache()儲存點陣圖時,縮放在此時被禁用.但為什麼?
我發現最後一件事,曲率越低,文字縮放越低.如果文字只是有點彎曲,似乎很好.
我會嘗試設定
this.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
在繪製螢幕之前,因為較低的質量可能意味著文字的更簡單的轉換.這當然是猜測.目前,您只能在寫入磁碟之前設定高品質.或者將其從寫入磁碟方法中刪除,以檢查它是否影響文字的繪製方式.
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/16656453/unwanted-warp-effect-drawing-text-on-path-android