back

グラフィックを描こう! (9/9)

■レイアウト用XMLファイルでDrawViewを使う

ここまでは、作成したDrawViewを直接Activity内でインスタンス生成し、画面にはめ込む、というやり方で使ってきました。が、考えて見ればViewだってコンポーネントの一種なのですから、普通のコンポーネント類と一緒にレイアウトして使用できるはずです。

では、DrawViewクラスを、main.xmlなどのレイアウト用XML内で使用するにはどうすればよいのでしょうか。これには、いくつかチェックするポイントがあります。

1.publicクラスとして用意する
ここまでのサンプルでは、Activityクラスの内部クラスとしてDrawViewクラスを作成していました。まぁ、このほうが使い勝手はいいのですが、独立したコンポーネントとして利用するのであれば、きちんとpublicクラスにしておく必要があります。

2.ContextとAttributeSetを引数にもつコンストラクタを用意する
先程までのサンプルでは、DrawViewのコンストラクタには、public DrawView(Context context)というものを1つだけ用意してありました。View継承クラスでは引数のないデフォルトコンストラクタはなく、必ずContextを引数に渡さないといけないので、とりえあずそうしてありました。

が、レイアウト用のXMLファイルの中でコンポーネントを利用する場合、これに加えて、AttributeSetというインスタンスを引数にもつコンストラクタも用意する必要があります。XMLをAndroidのシステムがロードしインスタンス化する際、タグに記述された属性を受け渡すため、この形式のコンストラクタが必要となるようです。

3.XML内では、クラスのフルパスを指定する
レイアウト用XML内では、クラス名だけでなく、必ずフルパスでクラスを指定するようにします。つまり、<DrawView …… />ではダメで、必ず<jp.tuyano.DrawView …… />としなければいけない、というわけです。こうしないとクラスがわかりません。

――以上の点に留意すれば、独自のViewをXML内でタグとして記述して利用することができるようになります。以下に、サンプルのDrawView.javaソースコードと、XML内で記述するタグの記述例を掲載しておきます。これを参考に、それぞれで試してみてください。


(by. SYODA-Tuyano.)

※リストが表示されない場合

AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。

※DrawView.javaのソースコード

package jp.tuyano;

import android.app.Activity;
import android.os.Bundle;

public class DrawView extends View {

	public DrawView(Context context) {
		super(context);
	}

	public DrawView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public void onDraw(Canvas c) {
		
		……略……

	}

}


※main.xmlへの追記タグ

<jp.tuyano.DrawView
	android:id="@+id/draw1"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	/>



 

記事のリストに戻る



PC Site G+ mail