2014-01-10 46 views
0

我一直在用這個撕掉我的頭髮。我正在嘗試製作Pong應用程序(因爲我們需要其中一個,不是嗎?),其中一切都看起來是矩形和復古的。由於矩形化,在我決定添加當前分數的文本通知之前,我設法對應用程序的開發進行了很深入的研究。這樣做後,我注意到畫布(或至少是文本)的繪製分辨率低於我的設備(Nexus 4)原生畫面的分辨率。繪製到SurfaceView是低分辨率

我試過使用反別名標誌,雖然這給文本更平滑的外觀,但我仍然可以看到它不像應該的那樣尖銳。爲了在某​​種程度上隔離問題,我嘗試在畫布上繪製一些測試圈(其中一個帶有抗鋸齒,另一個沒有)。瞧,這些圈子也是低分辨率的。

The offending text and circles

到目前爲止,我所知道的,我已經正確地實現了表面視圖。任何需要的代碼部分都可以給出。

謝謝。

下面是文本樣式的代碼和文本的繪圖:

textStyle = new Paint(Paint.LINEAR_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); 
textStyle.setColor(0xffffffff); 
textStyle.setAntiAlias(true); 
textStyle.setSubpixelText(true); 

// draw from the bottom left up (lowest most recent) 
Rect textBoundingRect = new Rect(); 
textStyle.getTextBounds(message, 0, message.length(), textBoundingRect); 
// draw the text at the bottom of the screen 
int top = (int) Math.round((c.getHeight() - (textBoundingRect.height() + 10) * i)); 

// c is just the canvas that was returned from locking 
c.drawText(m.getMessage(), 10, top, textStyle); 
+0

圓的半徑是多少?如果它很小並且顯着放大,那麼你會看到這個。同樣,如果您將文本呈現爲小點並放大,它會顯得鋸齒狀。 – fadden

+0

我使用Canvas.drawText和Canvas.drawCircle將圓圈和文本直接繪製到畫布上。在任何時候,我都可以擴大規模。我已經爲OP中的文本添加了適當的代碼。 –

+0

這個人有沒有人得到任何東西?我發現了一些奇怪的東西。首先,我發現如果我在onCreate函數中打印表面寬度的值,我會得到320的值。這很奇怪,考慮到我的手機屏幕寬度像素爲720.其次,如果我強制SurfaceHolder具有720 x 1080的分辨率,然後它看起來好多了,但是觸摸事件仍然搞砸了,因爲當我的手指在屏幕的最右側部分時,我得到的觸摸的x值爲320。請有人幫我解決這個問題。謝謝。 –

回答

0

我設法通過將SurfaceView父母的FrameLayout內解決這個問題。