0

私は現在、複数の正方形のグリッドを作成しようとしています (マインスイーパー グリッドになるはずです)。

すべての鉱山を特定の位置に取得する私の解決策は、次のループを使用することです。

for(int i = 0; i < cols; i++) 
{
    for(int j = 0; j < rows; j++) 
    {
        mines[i][j].setCoordinates(xCounter, yCounter);
        xCounter+=150; 
    }
    yCounter+=150;
    xCounter = 0;
}

現在、150 は 1 つの正方形の幅または高さを表示する必要があります。これは、1 つの鉱山が (0,0) にある場合、次の鉱山が (minewidth,0) にあり、ぴったりと収まるようにする必要があるためです。

しかし、私の質問は、どうすればこの 150 から独立できるのでしょうか?

どの数が間隔なしでグリッドになるかを試して、この数にたどり着きました。しかし、密度の低いデバイスを使用すると、画像は小さくなりますが、互いの距離は 150 ピクセルのままです。

では、一般的にこの定数から独立したものを取得するにはどうすればよいでしょうか?

まず、.getWidth() メソッドを使用して、「Mine」クラスに格納されているビットマップの幅を取得できると考えました。しかし、これがうまくいかなかったので...

デバイスの密度に関係なく、グリッドを作成するアイデアはありますか?

4

1 に答える 1

0

画面の幅と高さを (dp で) 取得し、係数を使用して各グリッドの幅を決定できます。

以下のコードをアプリケーション クラスに追加できます。

DisplayMetrics displayMetrics = applicationContext.getResources().getDisplayMetrics();
int absoluteWidthPx = displayMetrics.widthInPixels;
int abduluteHeightPx = displayMetrics.heightInPixels;

float scalingFactor = displayMetrics.density;

これで、画面の幅と高さの dp 値を見つけることができます。

/** pixels = densityIndependantPixels * (dotsPerInch/160), based on this **/
int dpWidth = (int)(absoluteWidthPx /scalingFactor);
int dpHeight = (int)(abduluteHeightPx /scalingFactor);

幅と高さを dp で取得したら、いくつかの要素を使用して各グリッドの幅を決定できます。

于 2013-05-09T17:18:12.377 に答える