2014-01-10 47 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内解决这个问题。