Lorem ipsum dolor sit amet, consectetur adipiscing elit. Test link

DrawView in Android Pen , Pencil , Shape Feature

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);
    }
}




        

Post a Comment