Android AVD分辨率与预期不同

Android AVD分辨率与预期不同,android,canvas,resolution,avd,Android,Canvas,Resolution,Avd,我有一些AVD代表稍微不同的分辨率(480x854)和(480x800)。 当我使用方法获取画布的大小(getWidth()/getHeight())时,它们会正确地报告相应的大小为480x854 问题是,如果我运行下面的代码,图像将脱离屏幕: SweepGradient sweepGrad = new SweepGradient(350, 350, new int[] { Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGE

我有一些AVD代表稍微不同的分辨率(480x854)和(480x800)。 当我使用方法获取画布的大小(getWidth()/getHeight())时,它们会正确地报告相应的大小为480x854

问题是,如果我运行下面的代码,图像将脱离屏幕:

SweepGradient sweepGrad = new SweepGradient(350, 350, 
new int[] { Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGENTA }, null);
circlePaint.setShader(sweepGrad);
canvas.drawCircle(350, 350, 50, circlePaint);
最后一行中的350、350、50值表示:x坐标、y坐标和圆的半径。
还发现半径为50的圆完全可见的最大“x”值为270(这意味着画布x尺寸为320)。

恐怕我问错了问题。 我在一台分辨率相同的真实设备上测试了这个应用程序,但它也错了

此问题的解决方案是添加一行:

<supports-screens android:anyDensity="true"/> 

在您的
AndroidManifest.xml

最后一个问题是。为什么需要这条线?在我的例子中,画布上的1个像素似乎等于一个真实设备的1.5个像素。 此外,我认为这不是问题的正确解决方案,因为添加指定的行会带来巨大的后果(如果我的应用程序不支持任何密度,我仍然希望在精确的坐标处放置一些图像怎么办?)

答案如下: