カスタムViewの実装の仕方

カスタムビューを使って、画面の真ん中に円を描くサンプルをつくってみました。

ボタンやテキストビューなど初めから用意されているViewだけでなく、自分自身でカスタムしたオリジナルViewを実装することができます。カスタムビューはゲームや複雑なアプリをつくるときに使われます。

Sample Image

◆実装の仕方◆
①Viewを継承したCustomViewクラスのための新しいファイル「CustomView.java」を作成する。

「CustomView.java」のソースコード

package com.appliinfo.android.samplethree;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CustomView extends View
{
	private Context mContext;
	private Paint mCirclePaint = new Paint();

	//コンストラクタ
	public CustomView(Context context) {
		super(context);
		mContext = context;
	}

	public CustomView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
	}

	@Override
	protected void onDraw(Canvas canvas)
	{
		super.onDraw(canvas);

		canvas.drawColor(Color.WHITE);

		//画面のサイズを取得
		int width = getWidth();
		int height = getHeight();

		//ペイントの色とスタイルをセット(色:青色 スタイル:図形の中を塗りつぶす)
		mCirclePaint.setARGB(255, 153, 204, 255);
		mCirclePaint.setStyle(Paint.Style.FILL);

		//画面の中心に円を描く
		canvas.drawCircle(width / 2, height / 2, 25, mCirclePaint);

	}

}

②res/layout/main.xmlにカスタムViewをセットする。

res/layout/main.xmlのソースコード

<?xml version=”1.0″ encoding=”utf-8″?>
<com.appliinfo.android.samplethree.CustomView xmlns:android=”http://schemas.android.com/apk/res/android
android:id=”@+id/customview”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”#FF000000″>
</com.appliinfo.android.samplethree.CustomView>

LayoutInflaterを使ってmain.xmlからViewを生成し、setContentView()でセットする。

LayoutInflaterを使うと、動的にレイアウトxmlからViewを生成することができるので、プログラム実行中にレイアウトを切り替えることもできるそうです。

「SampleThree.java」のソースコード

package com.appliinfo.android.samplethree;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

public class SampleThree extends Activity {

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LayoutInflater factory = LayoutInflater.from(this);

        // Set game layout
        View view = factory.inflate(R.layout.main, null);
        setContentView(view);

    }
}

残りの設定(AndroidManifest.xml)は、新しいプロジェクトをつくった時のままです。

中堅サーバエンジニア

中堅サーバエンジニア現在Unity勉強中

都内で10数年、Web系のアプリケーション開発をしています。 プログラミング、ゲーム、株とかのブログを書いています。

関連記事

コメント

この記事へのコメントはありません。