package com.dam.profesor.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.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; /** * Created by Profesor on 29/10/2015. */ public class Lienzo extends View { //Path que utilizaré para ir pintando las lineas private Path drawPath; //Paint de dibujar y Paint de Canvas private static Paint drawPaint; private Paint canvasPaint; //Color Inicial private static int paintColor = 0xFFFF0000; //canvas private Canvas drawCanvas; //canvas para guardar private Bitmap canvasBitmap; static float TamanyoPunto; private static boolean borrado=false; public Lienzo(Context context, AttributeSet attrs) { super(context, attrs); setupDrawing(); } private void setupDrawing(){ //Configuración del area sobre la que pintar drawPath = new Path(); drawPaint = new Paint(); drawPaint.setColor(paintColor); drawPaint.setAntiAlias(true); //setTamanyoPunto(20); drawPaint.setStrokeWidth(20); drawPaint.setStyle(Paint.Style.STROKE); drawPaint.setStrokeJoin(Paint.Join.ROUND); drawPaint.setStrokeCap(Paint.Cap.ROUND); canvasPaint = new Paint(Paint.DITHER_FLAG); } //Tamaño asignado a la vista @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); } //Pinta la vista. Será llamado desde el OnTouchEvent @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); canvas.drawPath(drawPath, drawPaint); } //Registra los touch de usuario @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; } //repintar invalidate(); return true; } //Actualiza color public void setColor(String newColor){ invalidate(); paintColor = Color.parseColor(newColor); drawPaint.setColor(paintColor); } //Poner tamaño del punto public static void setTamanyoPunto(float nuevoTamanyo){ //float pixel = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, // nuevoTamanyo, getResources().getDisplayMetrics()); //TamanyoPunto=pixel; drawPaint.setStrokeWidth(nuevoTamanyo); } //set borrado true or false public static void setBorrado(boolean estaborrado){ borrado=estaborrado; if(borrado) { drawPaint.setColor(Color.WHITE); //drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); } else { drawPaint.setColor(paintColor); //drawPaint.setXfermode(null); } } public void NuevoDibujo(){ drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR); invalidate(); } }