Android 绘制到SurfaceView是低分辨率的

Android 绘制到SurfaceView是低分辨率的,android,canvas,Android,Canvas,我一直在用这个把头发扯下来。我想申请乒乓球,因为我们需要另外一个,不是吗?所有东西看起来都是长方形的,复古的。由于矩形化,在决定添加当前分数的文本通知之前,我设法深入到应用程序的开发中。在这样做的时候,我注意到画布或至少文本的分辨率低于我的设备Nexus4的固有分辨率 我尝试过使用反别名标志,虽然这会使文本看起来更平滑,但我仍然可以看到它并没有应有的尖锐。为了在某种程度上隔离问题,我尝试在画布上绘制一些测试圆,一个带有抗锯齿,另一个没有。瞧,圆圈的分辨率太低了 就我所知,我已经正确地实现了曲面视

我一直在用这个把头发扯下来。我想申请乒乓球,因为我们需要另外一个,不是吗?所有东西看起来都是长方形的,复古的。由于矩形化,在决定添加当前分数的文本通知之前,我设法深入到应用程序的开发中。在这样做的时候,我注意到画布或至少文本的分辨率低于我的设备Nexus4的固有分辨率

我尝试过使用反别名标志,虽然这会使文本看起来更平滑,但我仍然可以看到它并没有应有的尖锐。为了在某种程度上隔离问题,我尝试在画布上绘制一些测试圆,一个带有抗锯齿,另一个没有。瞧,圆圈的分辨率太低了

就我所知,我已经正确地实现了曲面视图。可以给出所需代码的任何部分

谢谢

以下是文本样式和文本图形的代码:

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);

通过将SurfaceView放置在父框架布局中,我成功地解决了这个问题。

圆的半径是多少?如果它很小并且被显著放大,那么你会看到这一点。类似地,如果以较小的点大小渲染文本并按比例放大,它看起来会参差不齐。我使用canvas.drawText和canvas.drawCircle将圆圈和文本直接绘制到画布上。在任何情况下,我都不会扩大规模。我已经为OP中的文本添加了适当的代码。有人对此有任何了解吗?我发现了一些奇怪的东西。首先,我发现如果我在onCreate函数中打印曲面宽度的值,我会得到320。这很奇怪,因为我的手机屏幕的像素宽度是720。其次,如果我强制SurfaceHolder具有720 x 1080的分辨率,那么它看起来会更好,但是触摸事件仍然混乱,因为当我的手指位于屏幕最右侧时,触摸的x值为320。拜托,有人帮我弄清楚这件事。谢谢。听起来好像SurfaceView的设置不太正确。考虑到Pong离Breakout不远,您可能想看看。不幸的是,Breakout克隆是使用OpenGL ES编写的。也许我应该学习如何使用OpenGL。这是相当令人沮丧的,因为我有另一个项目,在其中我有一个类似的缩放问题,但我知道OpenGL对于我所需要的是过度的。无论如何,谢谢你。