1

私のAndroidアプリは480x800ピクセルの解像度で見栄えがしますが、240x400ピクセルのLDPI画面では壊れます。アクティビティで画面のスケーリング係数を取得できることはわかっています。これを使用すると、画面の解像度に応じてgetResources().getDisplayMetrics().density正確な値が得られます。float

私のアプリでは、とを使用し、を使用RelativeLayoutImageViewて画像のマージンを設定しましたsetMargins()。この方法ではint、上、左、下、右の値にピクセルを使用するため、取得したDPI係数を使用してこれらの値を設定するにはどうすればよいですか?(これはフロートです)。ありますMath.floor()が、ピクセルを使用して非常に特定の場所に画像を配置しています。メソッドによって返されるDPI係数は、小数点以下の桁数が非常に特定されているため、にキャストしintても機能しません。

アップデート

また、lp.setMargins(100,200,0,0);マージンを設定するために使用しますが、デバイスから受け取ったDPI係数を使用するためにどのような変更を加えますか?

PSプログラミングというよりは数学的な問題だと知っていますが、数学が苦手です。ごめんなさい。

4

1 に答える 1

8

私は自分自身をいじる代わりに質問をするのは時期尚早だったようですが、私がこの問題に最初に直面したわけではないことにも気づきました。

だから、ここに私が見つけた解決策があります。

Activityクラスに次のメソッドを作成しました。

private int px(float dips)
{
    float DP = getResources().getDisplayMetrics().density;
    return Math.round(dips * DP);
}

これにより、指定されたdp値が適切なピクセルに変換されます。メソッドで使用される変数DPをグローバルにし、メソッド内でonCreate()はなくメソッド内で初期化してpx()、メソッドを高速に実行することができます。

使用法:

lp.setMargins(px(100),px(200), 0, 0);

または、px()これだけのために作成するのではなくDP、グローバルなものにする場合。

lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0);

ただし、メソッドを使用すると、見た目がすっきりと読みやすくなります。:-)

于 2012-06-24T12:01:38.407 に答える