Android - Paint Simple - Tạo View vẽ hình đơn giản trên Android Studio

Tạo một lớp SimplePaintView

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;    }

}

Sử dụng trong Activity:

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

Bài đăng phổ biến từ blog này

Android - Date Time - Lấy giá trị ngày, giờ theo định dạng tùy biến trong Android Studio

Android - Custom SearchView - Tạo khung tìm kiếm đơn giản trong Android Studio

Android - Image - Take Photo, Choose Photo from Gallery - Xử lý chụp ảnh, lấy ảnh trong Android Studio