Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package it.test.ui.component;
- 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.graphics.Rect;
- import android.util.AttributeSet;
- import android.util.Log;
- import android.view.MotionEvent;
- import android.view.View;
- import android.widget.TextView;
- import android.widget.Toast;
- import java.util.ArrayList;
- public class DrawingView extends View
- {
- private Path mDrawPath;
- private Paint mBackgroundPaint;
- private Paint mDrawPaint;
- private Canvas mDrawCanvas;
- private Bitmap mCanvasBitmap;
- private boolean mDisegnoAbilitato;
- private boolean drawMode;
- private boolean mTestoAbilitato;
- private float x, y;
- private String testoDaDisegnare = "";
- private ArrayList<Path> mPaths = new ArrayList<>();
- private ArrayList<Paint> mPaints = new ArrayList<>();
- private ArrayList<Path> mUndonePaths = new ArrayList<>();
- private ArrayList<Paint> mUndonePaints = new ArrayList<>();
- // Set default values
- private int mBackgroundColor = 0x00FFFFFF;
- private int mPaintColor = 0x00660000;
- private int mStrokeWidth = 10;
- public DrawingView(Context context, AttributeSet attrs)
- {
- super(context, attrs);
- init();
- }
- private void init()
- {
- mDrawPath = new Path();
- mBackgroundPaint = new Paint();
- initPaint();
- }
- private void initPaint()
- {
- mDrawPaint = new Paint();
- mDrawPaint.setColor(mPaintColor);
- mDrawPaint.setAntiAlias(true);
- mDrawPaint.setStrokeWidth(mStrokeWidth);
- mDrawPaint.setStyle(Paint.Style.STROKE);
- mDrawPaint.setStrokeJoin(Paint.Join.ROUND);
- mDrawPaint.setStrokeCap(Paint.Cap.ROUND);
- }
- private void drawBackground(Canvas canvas)
- {
- mBackgroundPaint.setColor(Color.TRANSPARENT);
- mBackgroundPaint.setAntiAlias(true);
- mBackgroundPaint.setAlpha(0);
- canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), mBackgroundPaint);
- }
- private void drawPaths(Canvas canvas)
- {
- int i = 0;
- for (Path p : mPaths)
- {
- canvas.drawPath(p, mPaints.get(i));
- i++;
- }
- }
- @Override
- protected void onDraw(Canvas canvas)
- {
- drawBackground(canvas);
- drawPaths(canvas);
- canvas.drawPath(mDrawPath, mDrawPaint);
- }
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh)
- {
- super.onSizeChanged(w, h, oldw, oldh);
- mCanvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- mDrawCanvas = new Canvas(mCanvasBitmap);
- }
- public void setTestoDaDisegnare(String testo)
- {
- testoDaDisegnare = testo;
- }
- @Override
- public boolean onTouchEvent(MotionEvent event)
- {
- float touchX = event.getX();
- float touchY = event.getY();
- if(mDisegnoAbilitato) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- if(mTestoAbilitato)
- {
- mDrawPaint.getTextPath(testoDaDisegnare, 0, testoDaDisegnare.length(), touchX, touchY, mDrawPath);
- mDrawPath.close();
- invalidate();
- return true;
- }
- else {
- Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
- mDrawPath.moveTo(touchX, touchY);
- }
- break;
- case MotionEvent.ACTION_MOVE:
- Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
- mDrawPath.lineTo(touchX, touchY);
- break;
- case MotionEvent.ACTION_UP:
- Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
- mDrawPath.lineTo(touchX, touchY);
- mPaths.add(mDrawPath);
- mPaints.add(mDrawPaint);
- mDrawPath = new Path();
- initPaint();
- break;
- default:
- return false;
- }
- }
- invalidate();
- return true;
- }
- public void clearCanvas()
- {
- mPaths.clear();
- mPaints.clear();
- mUndonePaths.clear();
- mUndonePaints.clear();
- mDrawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
- invalidate();
- }
- public void startEraser()
- {
- Log.d("Drawingview", "StartEraser");
- mDrawPaint.setXfermode(null);
- mDrawPaint.setAlpha(0xFF);
- mDrawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
- }
- public void setPaintColor(int color)
- {
- mPaintColor = color;
- mDrawPaint.setColor(mPaintColor);
- }
- public void setDisegnoAbilitato(boolean abilitato)
- {
- mDisegnoAbilitato = abilitato;
- }
- public void setmTestoAbilitato(boolean abilitato) { mTestoAbilitato = abilitato; }
- public void setPaintStrokeWidth(int strokeWidth)
- {
- mStrokeWidth = strokeWidth;
- mDrawPaint.setStrokeWidth(mStrokeWidth);
- }
- public void setBackgroundColor(int color)
- {
- mBackgroundColor = color;
- mBackgroundPaint.setColor(mBackgroundColor);
- invalidate();
- }
- public void drawText(String testo)
- {
- Paint paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
- mDrawPaint.setColor(Color.BLUE);
- mDrawPaint.setTextSize(200);
- Rect rectText = new Rect();
- paintText.getTextBounds(testo, 0, testo.length(), rectText);
- mDrawCanvas.drawText(testo, 10, 25, mDrawPaint);
- // invalidate();
- }
- public Bitmap getBitmap()
- {
- drawBackground(mDrawCanvas);
- drawPaths(mDrawCanvas);
- return mCanvasBitmap;
- }
- public void undo()
- {
- if (mPaths.size() > 0)
- {
- mUndonePaths.add(mPaths.remove(mPaths.size() - 1));
- mUndonePaints.add(mPaints.remove(mPaints.size() - 1));
- invalidate();
- }
- }
- public void redo()
- {
- if (mUndonePaths.size() > 0)
- {
- mPaths.add(mUndonePaths.remove(mUndonePaths.size() - 1));
- mPaints.add(mUndonePaints.remove(mUndonePaints.size() - 1));
- invalidate();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement