Android - Paint Simple - Tạo View vẽ hình đơn giản trên Android Studio
Tạo một lớp SimplePaintView
Sử dụng trong Activity:
public class SimplePaintView extends View { public int width;
public int height;
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
Context context;
private Paint circlePaint;
private Path circlePath;
private Paint pencil; public SimplePaintView(Context c, int lineColor) { super(c);
getPencil(lineColor);
context = c;
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
circlePaint = new Paint();
circlePath = new Path();
circlePaint.setAntiAlias(true);
circlePaint.setColor(getResources().getColor(R.color.colorPrimary));
circlePaint.setStyle(Paint.Style.STROKE);
circlePaint.setStrokeJoin(Paint.Join.MITER);
circlePaint.setStrokeWidth(4f);
} private void getPencil(int lineColor) { pencil = new Paint();
pencil.setAntiAlias(true);
pencil.setDither(true);
pencil.setColor(lineColor);
pencil.setStyle(Paint.Style.STROKE);
pencil.setStrokeJoin(Paint.Join.ROUND);
pencil.setStrokeCap(Paint.Cap.ROUND);
pencil.setStrokeWidth(12);
} @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap); } @Override
protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, pencil);
canvas.drawPath(circlePath, circlePaint);
} private float mX, mY;
private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y; } private void touch_move(float x, float y) { float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
mX = x;
mY = y; circlePath.reset();
circlePath.addCircle(mX, mY, 30, Path.Direction.CW);
} } private void touch_up() { mPath.lineTo(mX, mY); circlePath.reset(); mCanvas.drawPath(mPath, pencil); mPath.reset(); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y);
invalidate();
break; case MotionEvent.ACTION_MOVE: touch_move(x, y);
invalidate();
break; case MotionEvent.ACTION_UP: touch_up();
invalidate();
break;
} return true; } }
SimplePaintView simplePaint = new SimplePaintView(this,
getResources().getColor(R.color.line_color));
Tham số truyền vào là context và màu của nét vẽ
Ta có thể tạo một ViewGroup bất kỳ để addView(simplePaint); (nên có kích thước xác định)
.... còn tiếp
Nhận xét
Đăng nhận xét