[android]画面のViewサイズを求めたいがエラーが発生する
Posted: 2014年11月10日(月) 12:39
お久しぶりですLLです。
現在このサイトのAndroidのページを参考にSurfaceViewを利用したチープなゲームを作っている最中なのですが,
元のページのサンプルプログラムが機種依存(座標直打ち)で気持ち悪かったので、画面サイズを取得してそこから初期座標を求めると言うプログラムを作っています。
本題ですが、その過程で
http://techbooster.org/android/hacks/16066/
のサイトを参考にデフォルトで作られたレイアウトのxmlからViewサイズを求めようとしました。
しかし、参考サイト通りにonWindowFocusChangedでfindViewByIdしてもなぜか中身がnullで起動時エラーを起こしてしまいます。
[ RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout1); ]のコード部分です。
デバッガを通しても何故その部分でエラーが発生するのかが分からず困っております。どうかご助力お願いします。
main_layout.xml
現在このサイトのAndroidのページを参考にSurfaceViewを利用したチープなゲームを作っている最中なのですが,
元のページのサンプルプログラムが機種依存(座標直打ち)で気持ち悪かったので、画面サイズを取得してそこから初期座標を求めると言うプログラムを作っています。
本題ですが、その過程で
http://techbooster.org/android/hacks/16066/
のサイトを参考にデフォルトで作られたレイアウトのxmlからViewサイズを求めようとしました。
しかし、参考サイト通りにonWindowFocusChangedでfindViewByIdしてもなぜか中身がnullで起動時エラーを起こしてしまいます。
[ RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout1); ]のコード部分です。
デバッガを通しても何故その部分でエラーが発生するのかが分からず困っております。どうかご助力お願いします。
package jp.denpa.testaplcation;
import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.Window;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
public static Display mDisplay; //ディスプレイ情報
public static Point mDispSize; //ディスプレイサイズ(ステータスバーも含めた画面全体描画領域)
public static Point mViewSize; //ビューサイズ(実際にコンテンツが描画される領域)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// タイトルバーを隠す場合
requestWindowFeature(Window.FEATURE_NO_TITLE); //なお、このメソッドはSetContantViewを通る前に指定すること(しないとエラー)
setContentView(new GameSurfaceView(this));
//ディスプレイ情報の取得
mDisplay = getWindowManager().getDefaultDisplay();
mDispSize = new Point(); //ディスプレイサイズ格納用の構造体クラス
mDisplay.getSize(mDispSize); //ディスプレイサイズの格納
mViewSize = new Point();
//センサーの初期化
AcSensor.Inst().onCreate(this);
}
//xmlで指定した高さや幅はOnCreate時に取得すると0しか取得できない。
//しかしOnWindowFocusChangedメソッド内で取得するとアプリ起動時にViewSizeが取得できる
@Override
public void onWindowFocusChanged(boolean hasForcus){
super.onWindowFocusChanged(hasForcus);
//Viewサイズを取得する
//描画用xmlの情報を取得
RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout1); //ここでrlにnullが入ってしまっているが原因が不明
mViewSize.x = rl.getWidth();
mViewSize.y = rl.getHeight();
}
//アクティビティが動き始めるとき
@Override
protected void onResume(){
super.onResume();
//アクティビティが動くときセンサーを動かし始める
AcSensor.Inst().onResume();
}
//アクティビティが一時停止する時
@Override
protected void onPause(){
super.onPause();
//アクティビティ中断時センサーを停止
AcSensor.Inst().onPause();
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="jp.denpa.testaplcation.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>