我在画布的中心绘制了两张位图:一张只是背景,它是顶视图中的水平仪,不会移动。第二个是看起来像“气泡”的位图。当用户倾斜手机时,传感器会读取倾斜度,气泡会根据传感器值沿 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 左右。