package com.example.asamles.app.paint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; public class DrawingView extends View { public final int SMALL = 10; private int paintColor = 0xFF000000; private Path drawPath; private Paint drawPaint; private Paint canvasPaint; private Canvas drawCanvas; private Bitmap canvasBitmap; private float brushSize; // private float lastBrushSize; public DrawingView(Context context, AttributeSet attrs) { super(context, attrs); setupDrawing(); } private void setupDrawing() { brushSize = SMALL; // lastBrushSize = brushSize; drawPath = new Path(); drawPaint = new Paint(); drawPaint.setColor(paintColor); drawPaint.setAntiAlias(true); drawPaint.setStrokeWidth(brushSize); drawPaint.setStyle(Paint.Style.STROKE); drawPaint.setStrokeJoin(Paint.Join.ROUND); drawPaint.setStrokeCap(Paint.Cap.ROUND); canvasPaint = new Paint(Paint.DITHER_FLAG); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); drawCanvas = new Canvas(canvasBitmap); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); canvas.drawPath(drawPath, drawPaint); } @Override public boolean onTouchEvent(MotionEvent event) { float touchX = event.getX(); float touchY = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: drawPath.moveTo(touchX, touchY); break; case MotionEvent.ACTION_MOVE: drawPath.lineTo(touchX, touchY); break; case MotionEvent.ACTION_UP: drawPath.lineTo(touchX, touchY); drawCanvas.drawPath(drawPath, drawPaint); drawPath.reset(); break; default: return false; } invalidate(); return true; } public void setColor(int paintColor) { invalidate(); this.paintColor = paintColor; // paintColor = Color.parseColor(newColor); drawPaint.setColor(paintColor); } public void setBrushSize(float newSize) { DisplayMetrics displayMetrics = null; if(getResources() != null) displayMetrics = getResources().getDisplayMetrics(); if (displayMetrics != null) { brushSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, newSize, displayMetrics); } else { brushSize = newSize; } drawPaint.setStrokeWidth(brushSize); } // public void setLastBrushSize(float lastSize) { // lastBrushSize = lastSize; // } // // public float getLastBrushSize() { // return lastBrushSize; // } public void setErase(boolean isErase) { if (isErase) { drawPaint.setColor(Color.WHITE); // drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); } else { drawPaint.setColor(paintColor); // drawPaint.setXfermode(null); } } public void clear() { drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR); invalidate(); } }