View クラスを継承して MyView クラスを宣言しますMyView#onDraw を Override して、グラフィックスを描画をしますsetContentView で、作成した MyView インスタンスを指定します
アクティビティの onCreate のタイミングにおいて、今までのようにレイアウトを指定する替りに、独自に実装した MyView を指定します。MyView#onDraw において、渡される Canvas オブジェクトに自由に描画すれば OK。実際のアプリケーションでは、ビットマップなどで描画バッファ(一般的な Off Screen Buffer)を保持しておき、描画バッファを画面に書き出すなどすると思います。
画面に固定グラフィックスを表示するだけでは寂しいので、Viewにタッチで絵を描く[Bitmapに線を書き込む] | アンドロイドアプリ開発TIP★STARを参考に、画面をタッチして絵を描けるようにしてみました。
package com.example.helloworld;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.MotionEvent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
// http://developer.android.com/reference/android/app/Activity.html
public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( new MyView( this ));
}
private class MyView extends View {
public MyView( Context context ) {
super( context );
}
private Bitmap mBitmap = null;
private Canvas mCanvas = null;
private Paint mPaint = null;
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged( w,h, oldw,oldh );
mBitmap = Bitmap.createBitmap( w,h, Bitmap.Config.ARGB_8888 );
mCanvas = new Canvas( mBitmap );
mPaint = new Paint();
}
protected void onDraw( Canvas canvas ) {
super.onDraw(canvas);
canvas.drawBitmap( mBitmap, 0, 0, null );
}
private float mOldX, mOldY;
public boolean onTouchEvent(MotionEvent e) {
switch( e.getAction()) {
case MotionEvent.ACTION_DOWN:
mPaint.setColor( Color.argb( 255, rand255(), rand255(), rand255()));
case MotionEvent.ACTION_UP:
mCanvas.drawCircle( mOldX = e.getX(), mOldY = e.getY(), 3, mPaint);
break;
case MotionEvent.ACTION_MOVE:
mCanvas.drawLine( mOldX,mOldY, e.getX(),e.getY(), mPaint);
mOldX = e.getX();
mOldY = e.getY();
break;
default:
return true;
}
invalidate();
return true;
}
private int rand255() {
return (int) (Math.random() * 256);
}
}
}
View を継承した MyView クラスを宣言します。MyView でアクティビティを描画します。invalidate して、画面を再描画します。すると、描画バッファの内容がいよいよ画面に表示されます。