我在画布的中心绘制了两个位图: 一个只是背景,它是顶视图中的精神层面,不会移动。第二个是位图,看起来像气泡"。当用户倾斜电话时,传感器读取倾斜并且气泡根据沿x轴的传感器值移动。但是,我需要确保气泡不会移动得太远,例如在背景位图之外。 所以我尝试了气泡可以到达的x坐标, 在我必须使用反复试验设置xPos = xPos -1之前 这在我的设备上工作正常。
澄清一下:在我的手机上,气泡可以从屏幕中间移动到坐标x = 50。这将是一个点,位图位于背景精神层面的最左侧。 在较大的手机上,x = 50的位置离得太远,因此看起来气泡从水位移出。
现在我试过以下: 我计算了气泡可以移动的面积%。我们这样说吧 是位图整个宽度的70%。所以我试着计算两个x边界值:
leftBoundary = XmiddlePoint - (backgroundBitmap.getWidth() * 0.35);
rightBoundary = XmiddlePoint + (backgroundBitmap.getWidth() * 0.35);
...在使用不同屏幕尺寸进行测试时不起作用:(
是否可以使用绝对坐标来补偿不同的屏幕尺寸和密度,还是我必须重新考虑我的想法?
如果您需要我忘记的任何信息,请告诉我。如果这个问题已经得到解答,我将非常感谢链接:)提前致谢!
编辑: 我像这样加载我的位图:
private Bitmap backgroundBitmap;
private static final int BITMAP_WIDTH = 1898;
private static final int BITMAP_HEIGHT = 438;
public class SimulationView extends View implements SensorEventListener{
public SimulationView(Context context){
Bitmap map = BitmapFactory.decodeResource(getResources, R.mipmap.backgroundImage);
backgroundBitmap = Bitmap.createScaledBitmap(map, BITMAP_WIDTH, BITMAP_HEIGHT, true;
}
并像这样绘制:
protected void onDraw(Canvas canvas){
canvas.drawBitmap(backgroundBitmap, XmiddlePoint - BITMAP_WIDTH / 2, YmiddlePont - BITMAP_HEIGHT / 2, null);
}
backgroundBitmap.getWidth()和getHeight()打印出正确的尺寸。 如上所述的计算将返回以下边界:
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
//which prints out width = 2392
xMiddlePoint = width / 2;
// = 1196
leftBoundary = xMiddlePoint - (BITMAP.getWidth()* 0.35);
// = 531,7
然而,当我使用反复试验时,正确的x坐标似乎在700左右。
答案 0 :(得分:0)
我发现了如何解决问题的一个很好的解释here. 用户AgentKnopf解释说,你必须像这样缩放坐标或位图:
X =(targetScreenWidth / defaultScreenWidth)* defaultXCoordinate
Y =(targetScreenHeight / defaultScreenHeight)* defaultYCoordinate
,在我的情况下,转换为:
int defaultScreenWidth = 1920;
int defaultXCoordinate = 333;
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
displayWidth = displayMetrics.widthPixels;
leftBoundary = (displayWidth / defaultScreenWidth) * defaultXCoordinates