DrawView in Android Pen , Pencil , Shape Feature
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class DrawView extends View {
private Paint paint;
private Path path;
private float startX, startY, currentX, currentY;
private Tool currentTool;
public enum Tool {
PENCIL,
PEN,
LINE,
RECTANGLE,
CIRCLE
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
path = new Path();
currentTool = Tool.PENCIL;
}
public void setTool(Tool tool) {
currentTool = tool;
}
public void startDrawing(float x, float y) {
startX = x;
startY = y;
path.moveTo(x, y);
invalidate();
}
public void continueDrawing(float x, float y) {
currentX = x;
currentY = y;
switch (currentTool) {
case PENCIL:
path.lineTo(x, y);
break;
case PEN:
path.quadTo(startX, startY, (x + startX) / 2, (y + startY) / 2);
startX = x;
startY = y;
break;
}
invalidate();
}
public void stopDrawing() {
switch (currentTool) {
case LINE:
path.reset();
path.moveTo(startX, startY);
path.lineTo(currentX, currentY);
break;
case RECTANGLE:
path.reset();
RectF rectF = new RectF(startX, startY, currentX, currentY);
path.addRect(rectF, Path.Direction.CW);
break;
case CIRCLE:
path.reset();
float cx = (startX + currentX) / 2;
float cy = (startY + currentY) / 2;
float radius = (float) Math.sqrt(Math.pow(currentX - startX, 2) + Math.pow(currentY - startY, 2)) / 2;
path.addCircle(cx, cy, radius, Path.Direction.CW);
break;
}
path.reset();
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path, paint);
}
}