Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) onDraw 함수를 이용해 화면에 비트맵이미지, 도형 그리기

 

환경 : Eclipse Mars, Android 4.2.2

 

이번예제는 메인화면에 ImageView 위젯으로 이미지를 그리는 것이 아니라 View 위젯에 onDraw() 함수를 이용해 비트맵이미지를 그려 넣습니다. 그리고 그 위에 도형도 그려 넣을 것입니다. 이렇게 onDraw 은 이미지를 보여줄뿐만 아니라 각 종 그림들을 그려넣을수 있는 기능을 제공합니다.

 

 

메인 activity 에서는 레이아웃 xml 을 이용하는 것이 아니라 아래에 생성한 View 객체를 setContentView() 인수로 넘겼습니다.

 

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	//setContentView(R.layout.activity_draw_bitmap);
	setContentView(new drawView(this));
}

 

그리고 View 위젯 클래스를 상속받아 만든 DrawView 클래스는 onDraw() 함수에 Canvas 객체로 비트맵 이미지를 그립니다. 예제는 drawBitmap() left, top 값을 달리주면서 두개의 비트맵 이미지를 그려 보았습니다.

 

canvas.drawBitmap(myBitmap01, 0, 0, null);
canvas.drawBitmap(myBitmap02, 150, 300, null);

 

이번에는 비트맵 이미지가 아닌 도형을 그려 봅니다. Canvas 객체의 역할은 우리가 도화지에 그림을 그리듯 View 에 그림을 그릴수 있도록 기능을 제공합니다. Canvas drawRect() 함수를 이용해 사각형을 그립니다.

 

mPaint.setColor(Color.GREEN);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(3);
canvas.drawRect(10, 10, 100, 100, mPaint);

 

아래는 화면에 비트맵과 사각형을 그린 View 객체의 전체 소스입니다.

 

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class DrawBitmapActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.activity_draw_bitmap);
		setContentView(new DrawView(this));
	}

	private class DrawView extends View {
		Bitmap myBitmap01, myBitmap02;
		Paint mPaint;

		public DrawView(Context context) {
			super(context);
			myBitmap01 = BitmapFactory.decodeResource(getResources(), R.drawable.view01);
			myBitmap02 = BitmapFactory.decodeResource(getResources(), R.drawable.view02);
			mPaint = new Paint();
		}

		protected void onDraw(Canvas canvas) {
			canvas.drawBitmap(myBitmap01, 0, 0, null);
			canvas.drawBitmap(myBitmap02, 150, 300, null);

			mPaint.setColor(Color.GREEN);
			mPaint.setStyle(Paint.Style.STROKE);
			mPaint.setStrokeWidth(3);
			canvas.drawRect(10, 10, 100, 100, mPaint);
		}
	}
}

 

반응형
Posted by 녹두장군1
,