현재 사용 중인 DrawingView의 소스 코드입니다.
package exam.test.simplelibtest.customview;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawingView extends View
{
private Bitmap bitmap;
private Bitmap beforeDrawing;
private Paint mPaint;
private ArrayList<Vertex> arVertex;
private int width;
private int height;
public DrawingView( Context context )
{
super( context );
init();
}
public DrawingView( Context context, AttributeSet attrs, int defStyle )
{
super( context, attrs, defStyle );
init();
}
public DrawingView( Context context, AttributeSet attrs )
{
super( context, attrs );
init();
}
private void init()
{
mPaint = new Paint();
mPaint.setColor( Color.BLACK );
mPaint.setStrokeWidth( 5 );
mPaint.setAntiAlias( true );
arVertex = new ArrayList<DrawingView.Vertex>();
}
@Override
public boolean onTouchEvent( MotionEvent event )
{
switch ( event.getAction() )
{
case MotionEvent.ACTION_DOWN :
arVertex.add( new Vertex( event.getX(), event.getY(), false ) );
break;
case MotionEvent.ACTION_MOVE :
arVertex.add( new Vertex( event.getX(), event.getY(), true ) );
}
invalidate();
return true;
}
public void setBeforeBitmapData( Bitmap beforeData )
{
beforeDrawing = beforeData;
}
@Override
protected void onDraw( Canvas canvas )
{
super.onDraw( canvas );
if ( bitmap == null && beforeDrawing == null )
{
bitmap = Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );
canvas = new Canvas( bitmap );
}
else if ( bitmap == null && beforeDrawing != null )
{
bitmap = beforeDrawing.copy( Config.ARGB_8888, true );
canvas = new Canvas( bitmap );
}
for ( int i = 0 ; i < arVertex.size() ; i++ )
{
if ( arVertex.get( i ).draw )
{
canvas.drawLine( arVertex.get( i - 1 ).x, arVertex.get( i - 1 ).y, arVertex.get( i ).x, arVertex.get( i ).y, mPaint );
}
else
{
canvas.drawPoint( arVertex.get( i ).x, arVertex.get( i ).y, mPaint );
}
}
}
@Override
protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec )
{
int heightMode = MeasureSpec.getMode( heightMeasureSpec );
int heightSize = 0;
switch ( heightMode )
{
case MeasureSpec.UNSPECIFIED :
heightSize = heightMeasureSpec;
break;
case MeasureSpec.AT_MOST :
heightSize = 400;
break;
case MeasureSpec.EXACTLY :
heightSize = MeasureSpec.getSize( heightMeasureSpec );
break;
}
int widthMode = MeasureSpec.getMode( widthMeasureSpec );
int widthSize = 0;
switch ( widthMode )
{
case MeasureSpec.UNSPECIFIED :
widthSize = widthMeasureSpec;
break;
case MeasureSpec.AT_MOST :
widthSize = 550;
break;
case MeasureSpec.EXACTLY :
widthSize = MeasureSpec.getSize( widthMeasureSpec );
break;
}
this.width = widthSize;
this.height = heightSize;
setMeasuredDimension( widthSize, heightSize );
}
@Override
public Bitmap getDrawingCache()
{
return bitmap;
}
public static class Vertex
{
float x;
float y;
boolean draw;
public Vertex( float x, float y, boolean draw )
{
this.x = x;
this.y = y;
this.draw = draw;
}
}
}
getDrawingCache를 통해 현재까지 그린 bitmap을 가져오고 싶은데, 아무것도 그려지지 않은 bitmap을 리턴합니다.
어느 부분을 수정해야 제대로 된 bitmap을 가져올까요?