カスタムビューを、MainActivityなどのXMLレイアウトで指定する場合は、どうするのだろうか。
com.bgstation0.android.sample.view_.CustomViewという感じで、フルネームスペースで指定。
CustomView.javaは、
package com.bgstation0.android.sample.view_; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.view.View; // カスタムビュークラスCustomViewの定義 public class CustomView extends View { // メンバフィールドの定義 Paint mPaint = null; // PaintオブジェクトmPaintをnullで初期化. // コンストラクタの定義 public CustomView(Context context){ // 既定の初期化. super(context); // 親クラスのコンストラクタにcontextを渡す. mPaint = new Paint(); // Paintオブジェクトを生成し, mPaintに格納. } // 描画時 @Override protected void onDraw(Canvas canvas){ // 文字の大きさを設定. mPaint.setTextSize(20.0f); // mPaint.setTextSizeで大きさを20.0にする. // テキスト"ABCDE"を描画. canvas.drawText("ABCDE", 50, 50, mPaint); // canvas.drawTextで(50, 50)の位置に"ABCDE"を描画. // 矩形の色を設定. mPaint.setColor(Color.RED); // mPaint.setColorで赤を指定. // 矩形を描画. canvas.drawRect(100, 100, 150, 150, mPaint); // canvas.drawRectで(100, 100)の位置に矩形を描画. // 描画スタイルを設定. mPaint.setStyle(Style.STROKE); // mPaint.setStyleで輪郭線だけを描画する. // 円を描画. canvas.drawCircle(200, 200, 30, mPaint); // canvas.drawCircleで(200, 200)の位置に円を描画. } }
変わらず。
MainActivity.javaで、
setContentViewにR.layout.activity_mainをセット。つまり元に戻した。
しかし、こうすると、
このように落ちてしまう。
そこで、
Viewの4つのコンストラクタ - Qiita
View | Android Developers
ContextとAttributeSetを引数にしたコンストラクタでも、
ちゃんと初期化をする。
すると、
ちゃんと表示される。
Sample/android/View/View_context_attrs/src/View at master · bg1bgst333/Sample · GitHub