2012-08-25 54 views
2

我使用canvas的drawText方法制作了自定義視圖。不知何故,沒有任何文字顯示在任何Jelly Bean設備上。它適用於ICS和以下。Android Canvas繪圖文本不起作用

有沒有人知道這個方法或任何相關方法是否有什麼從API 15更改爲16?

編輯代碼:(從那裏帆布作爲參數提供的抽獎方式)

paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setStrokeWidth(3); 
    paint.setColor(context.getResources().getColor(R.color.plot_background)); 
    canvas.drawRect(new Rect(0,0,getWidth(),getHeight()), paint); 
    paint.setColor(color_text); 
    paint.setTextSize(getScaled(18.5f)); 
    paint.setTextAlign(Align.CENTER); 
    canvas.drawText(title, (graphwidth/2) + horstart, border/2+15, paint); 

我知道是被處決的線和座標是正確的,因爲相同的代碼工作在舊平臺。

+2

能否請你告訴代碼?另外,你是否以任何方式改變了「畫布」?我知道,如果硬件加速,我的縮放/翻譯的'Canvas'部分在Jelly Bean設備中被切斷。 – Eric

+0

已修改。除了所有繪圖命令之外,我沒有在畫布上做任何事情。這是我寫的圖庫的一部分。 – Edison

+0

如果您在文本座標處繪製正方形(或其他形狀),它會顯示嗎? – Eric

回答

4

謝謝埃裏克。找出錯誤。我在canvas.getDensity()的基礎上縮放應用程序中的所有內容。由於某種原因,getDensity()在繪製函數始終爲0的情況下爲果凍豆設備。但它確實返回正確的值爲1.6 - > 4.0.3之間的任何東西

我沒有發佈的代碼(這是我的錯)是因爲我沒有懷疑getDensity()是問題以來的問題它在過去兩年內從未在應用程序投放市場時出現過。

解決方法是修改getScaled函數。

public float getScaled(Canvas canvas,float in){ 
    return in * (canvas.getDensity()==0 ? 1 : canvas.getDensity()/ 160.0f); 
} 

文檔不說,DENSITY_NONE可以返回,但我認爲那會發生什麼是Jelly Bean中爲你做縮放,因爲如果我只是1乘以它,它的工作原理是在兩個魅力我剛剛測試過的不同密度的設備。

(附註:任何人都熟悉的Android操作系統的內部糾正我,如果我錯了或確認了嗎?)

+0

啊,好的。認爲這也會對其他人有所幫助,因爲Jelly Bean重新設計了很多組件,包括'Canvas'。 – Eric

+0

有趣的發現。 – Ridcully