0

画像のサイズを変更する必要があるかどうかを確認したいので、アクティビティに何かを表示する前にサイズを確認したいグリッドレイアウトがあります。どうやらまだロードされていないため、OnStart() を実行できません。残りのコードとの同期の問題により、リスナーの追加は機能しません。デバイスの寸法を使用して値を手動で生成できればいいのですが、私の人生では、Android が自動的に配置する愚かなマージンの正確な値を見つけることができません。助言がありますか?基本的に以下のコードでは、SplitImage() が呼び出される前に GridLayout の高さ/幅が必要です。

XML

<GridLayout
    android:id="@+id/grid_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:useDefaultMargins="false" >

</GridLayout>

関連する Java

public class GamePlay extends Activity {
int difficulty = 0;
int image = 0;
int widthView = 0;
int heightView = 0;
int boardW;
int boardH;
int nSqr;
Bitmap[][] gameBoard;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    Intent intent = getIntent();
    difficulty = intent.getIntExtra("DIFFICULTY_KEY_DMIROU246", 0);
    image = intent.getIntExtra("LEVEL_KEY_DMIROU246", 0);
    setContentView(R.layout.activity_game_play);
    Log.w("Derp", "1");

}

@Override
protected void onStart() {
    super.onStart();
    View view = (View) findViewById(R.id.grid_layout);
    Log.w("Derp", "2");
    heightView = view.getHeight();
    widthView = view.getWidth();
    Log.w("Derp", "3");
    gameBoard = SplitImage();
    Log.w("Derp", "9");
}
4

3 に答える 3

0

最も簡単な解決策は、これを非同期で行うことです。view.getViewTreeObserver を使用しから、ビューのサイズを取得して を呼び出す OnGlobalLayoutListener を追加します。splitImage()

リスナーが頻繁に呼び出されないように注意してください。一度トリガーされたら削除するのが最善です。

于 2013-10-31T12:19:03.870 に答える