私はAndroidの初心者で、達成したい目標がありますが、現時点では適切な解決策を見つけることができません。
私は Android で開発しており、角の丸い2D 四角形の 2 次元グリッドを表示するアクティビティが必要です。グリッドのサイズは実行時に決定され、親アクティビティから転送されます。つまり、実行時に長方形も作成する必要があります。長方形にもカスタム動作が必要なため、次のことを試しました。
私は独自のクラスを作成し、View から継承しました。このonDraw()
メソッドでは、最初は ShapeDrawable XML ファイルで外観を定義し、それをカスタム四角形の構築にロードしたかったにもかかわらず、四角形がどのように見えるかを定義しました。それはうまくいきませんでした。アクティビティに割り当てられたレイアウトにビューを追加してグリッドを表示しようとすると、エラーが発生するため、行き詰まりました。これらの長方形の 1 つを直接設定するとsetContentView(rectangle)
、画面の中央のどこかに表示されます。
だから私の質問は:
View から継承してこれらの長方形を作成するのは正しい方法ですか? (ユーザーが長方形をクリックしたときに描画される方法を変更する必要があり、後で長方形がクリックされたときにメニューを開きたいことに注意してください)
これらの長方形を表示する最良の方法は何ですか? グリッド状に表示したい場合、どのようなレイアウトを使用すればよいですか? ユーザーは後でいくつかの長方形を削除することもできます。したがって、グリッドにギャップが生じる可能性があります。
このコードを使用して長方形をレイアウトに追加することはできませんでした。どのようにすればよいですか (LinearLayout を使用しました)。
ViewGroup layout = (ViewGroup) findViewById(R.id.conf_new_solar_plant_layout); SolarPanelView spView = new SolarPanelView(this); spView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); layout.addView(spView)
私が受け取るエラーは次のとおりです。
11-06 11:41:49.862: E/AndroidRuntime(2203): FATAL EXCEPTION: main
11-06 11:41:49.862: E/AndroidRuntime(2203): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smartexergy.app/com.smartexergy.app.ConfNewSolarPlantActivity}: java.lang.NullPointerException
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.access$600(ActivityThread.java:139)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.os.Looper.loop(Looper.java:154)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.main(ActivityThread.java:4944)
11-06 11:41:49.862: E/AndroidRuntime(2203): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 11:41:49.862: E/AndroidRuntime(2203): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-06 11:41:49.862: E/AndroidRuntime(2203): at dalvik.system.NativeStart.main(Native Method)
11-06 11:41:49.862: E/AndroidRuntime(2203): Caused by: java.lang.NullPointerException
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.smartexergy.app.ConfNewSolarPlantActivity.onCreate(ConfNewSolarPlantActivity.java:34)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.Activity.performCreate(Activity.java:4531)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
ありがとう!
編集: エラーを修正しました。レイアウトを contentView として設定するのを忘れていました。残りの質問はまだ残っています。