2017-07-01 93 views
0

我有两个位图可以绘制到画布的中心: 一个只是一个背景,它是顶视图中不会移动的精神层次。第二个是看起来像“气泡”的位图。当用户倾斜手机时,传感器将读取倾斜度,并根据传感器值沿着x轴移动气泡。但是,我需要确保气泡不会移动得太远,例如在背景位图之外。 因此,我试图使用试凑法设置xPos = xPos -1之前,气泡可以前往哪个x坐标, 这在我的设备上正常工作。使用x/y坐标设置移动粒子的边界

澄清:在我的手机上,气泡可能会从屏幕中间移动到坐标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