简单的自定义涂鸦控件,没有写自定义属性
java代码中找到view后直接setBitmap(Bitmap bitmap)后就可以使用了
提供清除方法clear()
保存可以参考另一篇view转bitmap,不多写了
设置画笔颜色,线大小可自定义扩展
具体代码如下:
/** * Author txwang * * @version V1.0 * Created by txwang on 2019/3/28. * Instruction :涂鸦控件 * @date: 2019-03-28 15:30 **/ public class ImageDoodleView extends View { private int width; private int hei; private Bitmap bitmap; private Paint paint; private Canvas canvas; private float xPosition = -1; private float yPosition = -1; private boolean isFirst = true; private Path doodlePath; public ImageDoodleView(Context context) { this(context,null); } public ImageDoodleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { paint = new Paint(); paint.setColor(Color.parseColor("#66ff0000")); paint.setStrokeWidth(10); paint.setAntiAlias(true); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStyle(Paint.Style.STROKE); doodlePath = new Path(); } @Override protected void onDraw(Canvas canvas) { this.canvas = canvas; if (null != bitmap){ Paint paint = new Paint(); // int left = width / 2 - bitmap.getWidth()/2; // int right = width / 2 + bitmap.getWidth()/2; // int top = hei / 2 - bitmap.getHeight()/2; // int bottum = hei / 2 + bitmap.getHeight()/2; int left = 0; int right = width; int top = 0; int bottum = hei; Rect msgRect = new Rect(left,top,right,bottum); canvas.drawBitmap(bitmap,null,msgRect,paint); isFirst = false; } canvas.drawPath(doodlePath,paint); } public void clear() { isFirst = true; doodlePath.reset(); invalidate(); } @Override public boolean onTouchEvent(MotionEvent event) { xPosition = event.getX(); yPosition = event.getY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: doodlePath.moveTo(xPosition,yPosition); break; case MotionEvent.ACTION_MOVE: doodlePath.lineTo(xPosition,yPosition); break; } invalidate(); return true; } public void setBitmap(Bitmap bitmap){ this.bitmap = bitmap; invalidate(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); this.width = w; this.hei = h; } }