2017-07-01 10 views
0

私はキャンバスの中心に描画する2つのビットマップを持っています: 1つはバックグラウンドで、1つは背景です。 2つ目は、「気泡」のようなビットマップです。ユーザが電話機を傾けると、センサは傾きを読み取り、気泡はx軸に沿ったセンサ値に従って移動する。しかし、気泡があまりにも遠くに移動しないようにする必要があります。 試行錯誤を使用してxPos = xPos -1を設定する前に、バブルの移動先のx座標を に設定しようとしました。 これはデバイスで正常に動作します。x/y座標を使用して移動するパーティクルの境界を設定する

私の電話では、気泡が画面中央からx = 50の座標に移動する可能性があります。これは、ビットマップが背景精神レベルの左端にある点です。 大きな電話機では、位置x = 50があまりにも離れているため、気泡が水位から出てきたように見えます。

私は以下を試しました: 気泡が動くことができる面積%を計算しました。 がビットマップの全幅の70%であるとします。異なる画面サイズ:(

でテストするときに使用して、異なる画面サイズや密度を補償することが可能です仕事をdoesntの

leftBoundary = XmiddlePoint - (backgroundBitmap.getWidth() * 0.35); rightBoundary = XmiddlePoint + (backgroundBitmap.getWidth() * 0.35);

...:だから私は2つのxの境界値を計算してみました絶対座標か私のアイデアを考え直す必要がありますか?

私が忘れた情報が必要な場合は、私に知らせてください。この質問に既に回答しているなら、私はリンクありがとうございます:)

編集: 私はこのように私のビットマップをロードします。

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

私は偉大な説明を越えて来ているであると思われます

X =(targetScreenWidth/defaultScreenWidth)* defaultXCoordinate

:ユーザーAgentKnopfが説明したように、私の問題 here. を解決する方法を、あなたはこのような座標やビットマップを拡大縮小する必要があります

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 
関連する問題