2017-07-01 58 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