2015-07-12 35 views
4

所以,我有這個問題,我的android文本繪製在背景圖像頂部的畫布上沒有顯示。我的代碼:Android canvas.drawText()沒有顯示

@Override 
public void draw(Canvas canvas) { 
    final float scaleFactorX = getWidth()/WIDTH; 
    final float scaleFactorY = getHeight()/HEIGHT; 

    if(canvas != null) { 
     final int savedState = canvas.save(); 
     canvas.scale(scaleFactorX, scaleFactorY); 

     Paint textPaint = new Paint(); 
     textPaint.setColor(Color.RED); 
     textPaint.setTextSize(20); 
     textPaint.setAntiAlias(true); 

     canvas.drawBitmap(background, 0, 0, null); 
     canvas.drawBitmap(button_start, (canvas.getWidth() - button_start.getScaledWidth(canvas))/2, canvas.getHeight()/4, null); 
     canvas.drawText("Test text", 0, 0, textPaint); 
     canvas.restoreToCount(savedState); 
    } 
} 

有沒有人有一個想法我做錯了什麼?

+2

作爲附帶說明,避免的onDraw創建實例()。 Paint對象可以重用,你只是在這裏浪費大量的內存。 –

+0

'canvas.restoreToCount(savedState);'的目的是什麼? – cygery

+0

@cygery我認爲沒有它,屏幕會不斷縮放,從而不斷放大。經過測試,似乎並非如此。感謝您的關注。 –

回答

12

基線的y軸是不爲0,嘗試這種

Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); 
    textPaint.setColor(Color.RED); 
    textPaint.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics())); 
    textPaint.setTextAlign(Align.LEFT); 
    FontMetrics metric = textPaint.getFontMetrics(); 
    int textHeight = (int) Math.ceil(metric.descent - metric.ascent); 
    int y = (int)(textHeight - metric.descent); 
    canvas.drawText("text", 0, y, textPaint);