Android 使用x/y坐标设置移动粒子的边界

Android 使用x/y坐标设置移动粒子的边界,android,coordinates,screen-size,screen-density,Android,Coordinates,Screen Size,Screen Density,我在画布的中心绘制了两个位图: 一个只是背景,它是顶视图中的一个精神层面,不会移动。第二个是看起来像“气泡”的位图。当用户倾斜手机时,传感器会读取倾斜信息,气泡会根据传感器值沿x轴移动。但是,我需要确保气泡不会移动得太远,例如离开背景位图。 所以我试着确定气泡可以移动到哪个x坐标, 在我必须使用试错法设置xPos=xPos-1之前 这在我的设备上运行良好 澄清一下:在我的手机上,气泡可能会从屏幕中间移动到坐标x=50。这将是位图位于背景水平最左侧的点。 在一部较大的手机上,x=50的位置离得太远

我在画布的中心绘制了两个位图: 一个只是背景,它是顶视图中的一个精神层面,不会移动。第二个是看起来像“气泡”的位图。当用户倾斜手机时,传感器会读取倾斜信息,气泡会根据传感器值沿x轴移动。但是,我需要确保气泡不会移动得太远,例如离开背景位图。 所以我试着确定气泡可以移动到哪个x坐标, 在我必须使用试错法设置xPos=xPos-1之前 这在我的设备上运行良好

澄清一下:在我的手机上,气泡可能会从屏幕中间移动到坐标x=50。这将是位图位于背景水平最左侧的点。 在一部较大的手机上,x=50的位置离得太远,因此看起来像是从水面上飞出的气泡

现在我尝试了以下几点: 我用%计算了气泡可以移动的面积。这么说吧 是位图整个宽度的70%。所以我试着计算两个x边界值:

leftBoundary=XmiddlePoint-(backgroundBitmap.getWidth()*0.35);
rightBoundary=xmidlePoint+(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);
}
画成这样:

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左右。

我遇到了一个关于如何解决问题的很好的解释 正如用户AgentKnopf所解释的,您必须按如下方式缩放坐标或位图:

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);
}
X=(targetScreenWidth/defaultScreenWidth)*defaultXCoordinate

Y=(目标屏幕高度/默认屏幕高度)*默认协调

在我的例子中,这意味着:

int defaultScreenWidth = 1920;
int defaultXCoordinate = 333;
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
displayWidth = displayMetrics.widthPixels;
leftBoundary = (displayWidth / defaultScreenWidth) * defaultXCoordinates

您的实现看起来不错。你能记录输出的值和屏幕大小吗?在计算该值之前,能否确认位图宽度正确且视图已正确充气?