package com.firstpeople.paintpad.painttools; import com.firstpeople.paintpad.interfaces.ToolInterface; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; public class Eraser implements ToolInterface { // ֻ�е��ƶ����볬�����ֵ�Ż��ƶ� private static final float TOUCH_TOLERANCE = 4.0f; private float mCurrentX = 0.0f; private float mCurrentY = 0.0f; private Path mPath = new Path(); private Paint mEraserPaint = new Paint(); private boolean mHasDraw = false; private int eraserSize = 0; public Eraser(int eraserSize) { mEraserPaint.setStrokeWidth(eraserSize); this.eraserSize = eraserSize; setUp(); } private void setUp() { // color�����л�Ҫ����ɫ��ģʽ������eraser mEraserPaint.setColor(Color.BLACK); mEraserPaint.setDither(true); mEraserPaint.setAntiAlias(true); mEraserPaint.setStyle(Paint.Style.STROKE); mEraserPaint.setStrokeJoin(Paint.Join.ROUND); mEraserPaint.setStrokeCap(Paint.Cap.SQUARE); mEraserPaint .setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); } @Override public void draw(Canvas canvas) { if (null != canvas) { canvas.drawPath(mPath, mEraserPaint); } } @Override public void touchDown(float x, float y) { mPath.reset(); mPath.moveTo(x, y); mCurrentX = x; mCurrentY = y; } @Override public void touchMove(float x, float y) { if (isMoved(x, y)) { drawBeziercurve(x, y); mCurrentX = x; mCurrentY = y; mHasDraw = true; } } @Override public void touchUp(float x, float y) { mPath.lineTo(x, y); } @Override public boolean hasDraw() { return mHasDraw; } // �ж��Ƿ��ƶ� private boolean isMoved(float x, float y) { float dx = Math.abs(x - mCurrentX); float dy = Math.abs(y - mCurrentX); boolean isMoved = ((dx >= TOUCH_TOLERANCE) || (dy >= TOUCH_TOLERANCE)); return isMoved; } // �������������� private void drawBeziercurve(float x, float y) { mPath.quadTo(mCurrentX, mCurrentY, (x + mCurrentX) / 2, (y + mCurrentY) / 2); } @Override public String toString() { return "eraser��" + " size is"+ eraserSize; } }