Advertisement
cristo1985

CustomDrawingView

Mar 16th, 2022 (edited)
657
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.71 KB | None | 0 0
  1. package it.test.ui.component;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.Color;
  7. import android.graphics.Paint;
  8. import android.graphics.Path;
  9. import android.graphics.PorterDuff;
  10. import android.graphics.PorterDuffXfermode;
  11. import android.graphics.Rect;
  12. import android.util.AttributeSet;
  13. import android.util.Log;
  14. import android.view.MotionEvent;
  15. import android.view.View;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18.  
  19. import java.util.ArrayList;
  20.  
  21.     public class DrawingView extends View
  22.     {
  23.         private Path mDrawPath;
  24.         private Paint mBackgroundPaint;
  25.         private Paint mDrawPaint;
  26.         private Canvas mDrawCanvas;
  27.         private Bitmap mCanvasBitmap;
  28.         private boolean mDisegnoAbilitato;
  29.         private boolean drawMode;
  30.         private boolean mTestoAbilitato;
  31.         private float x, y;
  32.  
  33.         private String testoDaDisegnare = "";
  34.  
  35.         private ArrayList<Path> mPaths = new ArrayList<>();
  36.         private ArrayList<Paint> mPaints = new ArrayList<>();
  37.         private ArrayList<Path> mUndonePaths = new ArrayList<>();
  38.         private ArrayList<Paint> mUndonePaints = new ArrayList<>();
  39.  
  40.         // Set default values
  41.         private int mBackgroundColor = 0x00FFFFFF;
  42.         private int mPaintColor = 0x00660000;
  43.         private int mStrokeWidth = 10;
  44.  
  45.         public DrawingView(Context context, AttributeSet attrs)
  46.         {
  47.             super(context, attrs);
  48.             init();
  49.         }
  50.  
  51.         private void init()
  52.         {
  53.             mDrawPath = new Path();
  54.             mBackgroundPaint = new Paint();
  55.             initPaint();
  56.         }
  57.  
  58.         private void initPaint()
  59.         {
  60.             mDrawPaint = new Paint();
  61.             mDrawPaint.setColor(mPaintColor);
  62.             mDrawPaint.setAntiAlias(true);
  63.             mDrawPaint.setStrokeWidth(mStrokeWidth);
  64.             mDrawPaint.setStyle(Paint.Style.STROKE);
  65.             mDrawPaint.setStrokeJoin(Paint.Join.ROUND);
  66.             mDrawPaint.setStrokeCap(Paint.Cap.ROUND);
  67.         }
  68.  
  69.         private void drawBackground(Canvas canvas)
  70.         {
  71.             mBackgroundPaint.setColor(Color.TRANSPARENT);
  72.             mBackgroundPaint.setAntiAlias(true);
  73.             mBackgroundPaint.setAlpha(0);
  74.             canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), mBackgroundPaint);
  75.  
  76.         }
  77.  
  78.         private void drawPaths(Canvas canvas)
  79.         {
  80.             int i = 0;
  81.             for (Path p : mPaths)
  82.             {
  83.                 canvas.drawPath(p, mPaints.get(i));
  84.                 i++;
  85.             }
  86.         }
  87.  
  88.         @Override
  89.         protected void onDraw(Canvas canvas)
  90.         {
  91.             drawBackground(canvas);
  92.             drawPaths(canvas);
  93.  
  94.             canvas.drawPath(mDrawPath, mDrawPaint);
  95.         }
  96.  
  97.         @Override
  98.         protected void onSizeChanged(int w, int h, int oldw, int oldh)
  99.         {
  100.             super.onSizeChanged(w, h, oldw, oldh);
  101.  
  102.             mCanvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
  103.  
  104.             mDrawCanvas = new Canvas(mCanvasBitmap);
  105.         }
  106.  
  107.  
  108.         public void setTestoDaDisegnare(String testo)
  109.         {
  110.             testoDaDisegnare = testo;
  111.         }
  112.  
  113.  
  114.         @Override
  115.         public boolean onTouchEvent(MotionEvent event)
  116.         {
  117.             float touchX = event.getX();
  118.             float touchY = event.getY();
  119.  
  120.             if(mDisegnoAbilitato) {
  121.  
  122.                 switch (event.getAction()) {
  123.                     case MotionEvent.ACTION_DOWN:
  124.                         if(mTestoAbilitato)
  125.                         {
  126.                             mDrawPaint.getTextPath(testoDaDisegnare, 0, testoDaDisegnare.length(), touchX, touchY, mDrawPath);
  127.                             mDrawPath.close();
  128.                             invalidate();
  129.                             return true;
  130.                         }
  131.                         else {
  132.                             Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
  133.                             mDrawPath.moveTo(touchX, touchY);
  134.                         }
  135.                         break;
  136.                     case MotionEvent.ACTION_MOVE:
  137.                         Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
  138.                         mDrawPath.lineTo(touchX, touchY);
  139.                         break;
  140.                     case MotionEvent.ACTION_UP:
  141.                         Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
  142.                         mDrawPath.lineTo(touchX, touchY);
  143.                         mPaths.add(mDrawPath);
  144.                         mPaints.add(mDrawPaint);
  145.                         mDrawPath = new Path();
  146.                         initPaint();
  147.                         break;
  148.                     default:
  149.                         return false;
  150.                 }
  151.  
  152.             }
  153.  
  154.             invalidate();
  155.             return true;
  156.         }
  157.  
  158.         public void clearCanvas()
  159.         {
  160.             mPaths.clear();
  161.             mPaints.clear();
  162.             mUndonePaths.clear();
  163.             mUndonePaints.clear();
  164.             mDrawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
  165.             invalidate();
  166.         }
  167.  
  168.         public void startEraser()
  169.         {
  170.             Log.d("Drawingview", "StartEraser");
  171.             mDrawPaint.setXfermode(null);
  172.             mDrawPaint.setAlpha(0xFF);
  173.             mDrawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
  174.  
  175.         }
  176.  
  177.         public void setPaintColor(int color)
  178.         {
  179.             mPaintColor = color;
  180.             mDrawPaint.setColor(mPaintColor);
  181.         }
  182.  
  183.         public void setDisegnoAbilitato(boolean abilitato)
  184.         {
  185.             mDisegnoAbilitato = abilitato;
  186.         }
  187.  
  188.         public void setmTestoAbilitato(boolean abilitato) { mTestoAbilitato = abilitato; }
  189.  
  190.         public void setPaintStrokeWidth(int strokeWidth)
  191.         {
  192.             mStrokeWidth = strokeWidth;
  193.             mDrawPaint.setStrokeWidth(mStrokeWidth);
  194.         }
  195.  
  196.         public void setBackgroundColor(int color)
  197.         {
  198.             mBackgroundColor = color;
  199.             mBackgroundPaint.setColor(mBackgroundColor);
  200.             invalidate();
  201.         }
  202.  
  203.         public void drawText(String testo)
  204.         {
  205.             Paint paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
  206.             mDrawPaint.setColor(Color.BLUE);
  207.             mDrawPaint.setTextSize(200);
  208.  
  209.             Rect rectText = new Rect();
  210.             paintText.getTextBounds(testo, 0, testo.length(), rectText);
  211.  
  212.             mDrawCanvas.drawText(testo, 10, 25, mDrawPaint);
  213.         //  invalidate();
  214.         }
  215.  
  216.  
  217.  
  218.         public Bitmap getBitmap()
  219.         {
  220.             drawBackground(mDrawCanvas);
  221.             drawPaths(mDrawCanvas);
  222.             return mCanvasBitmap;
  223.         }
  224.  
  225.         public void undo()
  226.         {
  227.             if (mPaths.size() > 0)
  228.             {
  229.                 mUndonePaths.add(mPaths.remove(mPaths.size() - 1));
  230.                 mUndonePaints.add(mPaints.remove(mPaints.size() - 1));
  231.                 invalidate();
  232.             }
  233.         }
  234.  
  235.  
  236.         public void redo()
  237.         {
  238.             if (mUndonePaths.size() > 0)
  239.             {
  240.                 mPaths.add(mUndonePaths.remove(mUndonePaths.size() - 1));
  241.                 mPaints.add(mUndonePaints.remove(mUndonePaints.size() - 1));
  242.                 invalidate();
  243.             }
  244.         }
  245.     }
  246.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement