5

Nexus 7 1280x800 android 4.2.2API17を使用しています

画面のサイズを取得して、同じ高さと幅の正方形のセクションに分割したいと思います。

私はFrameLayoutを使用しており、正方形はImageViewのサブクラスです。

私はこれをします

context.getResources().getDisplayMetrics().heightPixels; ----> 1205 context.getResources().getDisplayMetrics().widthPixels; ------> 800

画面の上部と下部に2つのAndroidメニューがあるため、1205は1280ではないと思います。

私の正方形のそれぞれは30x30ピクセルです。

最大数として描画できる正方形の数を知るには、次のようにします。

int x=1205/30;

座標に画像をペイントしようとする(x-1)*30 ,yと、画面から部分的に描画されます。

アプリケーションが使用できる画面の部分をどのように知ることができますか?

私の問題をうまく説明できたと思います。

どうもありがとう。

4

4 に答える 4

3

すべての正方形が同じ ImageView にある場合、最も簡単な方法は独自の imageView を作成することだと思います。

class MyImageView extends ImageView {
    Context context;
    int myWidth = 0;
    int myHeigh = 0;
    int numBoxesX = 0;
    int numBoxesY = 0;

    private final int boxWidth  = 30;
    private final int boxHeight = 30;

    ImageView(Context c) {
        super(c);
        context = c;
    }
}

クラスでは、 onSizeChange 関数をオーバーライドします

@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    myWidth  = w;
    myHeight = h;
    // Set up other things that you work out from the width and height here, such as

    numBoxesX = myWidth / boxWidth;
    numBoxesY = myHeight / boxHeight;
}

次に、ボックスを描画する関数を作成します。

public void drawSubBox(int x, int y, ...) {
    // Fail silently if the box being drawn doesn't exist ...
    if ((x<0) || (x>=numBoxesX)) return;
    if ((y<0) || (y>=numBoxesY)) return;

    // Your code to draw the box on the screen ...
}

このビューを作成したら、それをレイアウトに追加し、サブボックスなどのサイズを定義するために追加するものを含め、他のビューと同じようにその機能にアクセスできます。レイアウト

MyImageView miv;

miv = topView.findViewById("idforMyImageViewSetInLayoutXMLfile");

miv.drawSubBox(0,0, ...);
于 2013-03-12T17:20:15.630 に答える
1

画面のピクセル寸法を調べることについては、正しいと思います。heightPixels使用している画面widthPixels絶対ピクセル寸法が表示されます。ただ気をつけたいのは、画面の密度によって結果が変わるので、ベースの測定値として px を使用するのが心配です。dp画面内のピクセルの絶対数を見つけた後、その数を でスケーリングして、dpiすべての電話で長方形が同じように描画されるようにする方が、はるかに安全なアイデアのようです。また、絶対ピクセル値は実際の空き領域を表すのではなく、ピクセルの総数だけを表します。

そうでなければ、このレイアウトが画面に完全に収まるように計算がうまくいくかどうかはわかりません。x = 1205/30 = 40.166667. その番号を差し込む(x-1)*30 = 1,175。携帯電話の x 方向に実際に 1205 ピクセル (@JRowan - 横長の可能性があります) が含まれていると仮定すると、30 ピクセルを追加すると、これらの長方形が画面に収まるように見えます。ただし、これは、いずれの長方形の間にもボーダーまたはオフセットがない場合にのみ機能します。あなたが提供した数値を使用すると、画面の幅 1205 ピクセルで 4.8 ピクセルしか余裕がありません。そのスペースに 40 個の長方形があると、薄い境界線の人でも図面が画面からはみ出してしまいます。

于 2013-03-12T17:38:30.143 に答える
1

マージンについて疑問に思いながら問題を解決しました。

重要なのはタイトル バーです。これは実際にはアプリケーション画面の一部ですが、描画画面の外にあります。

タイトルバーを削除すると、完全に機能します。

getWindow().requestFeature(Window.FEATURE_NO_TITLE);

私はこれに2日間費やし、正しい質問をしている答えを見つけました。見つけた投稿へのリンクをここに残します。

Android アプリケーションのタイトル バーのサイズを大きくするにはどうすればよいですか?

Android のステータス バーの高さ

答えてくれてありがとう。

于 2013-03-13T00:39:32.483 に答える
-2

グリッドがフラグメント内にある場合、問題はフラグメントのビューが膨張する前に使用可能な画面サイズを取得することです。同様のシナリオで、ホスティング アクティビティでフラグメント コンテナーの幅と高さを取得し、これらをパラメーターとしてグリッドを使用してフラグメントに渡しました。

于 2014-08-29T15:42:06.347 に答える