public class DrawClear extends View { private Paint myPaint; //自定义的画笔 private Bitmap myBitmap;// 实现双缓存绘图的 Bitmap private Canvas myCanvas; private List<Point> points; int i; private float x; private float y; public DrawClear(Context context) { this(context,null); } public DrawClear(Context context, AttributeSet attrs) { this(context, attrs,0); } public DrawClear(Context context,AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); points = new ArrayList<>(); } //初始化画笔 private void initPaint() { if (myPaint == null) { myPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); myPaint.setStyle(Paint.Style.FILL); myPaint.setColor(Color.BLACK); //设置画笔的粗细 myPaint.setStrokeWidth(10); //设置划线是线的圆角 myPaint.setStrokeJoin(Paint.Join.ROUND);// 圆角 myPaint.setStrokeCap(Paint.Cap.ROUND); myPaint.setPathEffect(new CornerPathEffect(50)); // PahtEfect指笔迹的风格,CornerPathEffect在拐角处添加弧度,弧度半径50像素点 linePaint.setStyle(Style.STROKE);// 设置画笔风格 //设置画笔 // myPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); int height = getMeasuredHeight(); if (width == 0) { width = getWidth(); } if (height == 0) { height = getHeight(); } Log.e(TAG, "onMeasure: DrawClear" + width + " ==" + height); //初始化 自己用来缓存的Bitmap 与画布 if (myBitmap == null) { myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); myCanvas = new Canvas(myBitmap); myCanvas.drawColor(Color.BLUE); } //设置被刮去的图片 // Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); // //在被刮去图片上在画上显示的字 // Paint paint = new Paint(); // myCanvas.drawBitmap(bitmap, 0, 0, paint); // paint.setColor(Color.BLACK); // paint.setStrokeWidth(20); // paint.setTextSize(50); // myCanvas.drawText("刮一刮", 50, 100, paint); } /** * 滑动事件 判断 * * @param * @return */ int size = 0; @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); Log.e("rrr","走进了点击"+action); switch (action) { case MotionEvent.ACTION_DOWN: Path path = new Path(); x = event.getX(); y = event.getY(); Log.e("rrr","走进了点击1"); break; case MotionEvent.ACTION_MOVE: Log.e("rrr","滑动"); int a = (int) event.getX(); int b = (int) event.getY(); Point point = new Point(a, b); points.add(point); //记录最后的点 size = points.size() - 1; if (size > 0) { //只画出最后的两个点之间的线 myCanvas.drawLine(points.get(size - 1).x, points.get(size - 1).y, points.get(size).x, points.get(size).y, myPaint); // myCanvas.drawLine(x,y, points.get(size).x, points.get(size).y, myPaint); } invalidate(); break; case MotionEvent.ACTION_UP: Log.e("rrr","走进了点击33"); //清理所有记录的点 points.clear(); break; } return true; } public Bitmap getB(){ return myBitmap; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (myBitmap == null) { Log.e("rrr","kong"); return; } Log.e("rrr",""+(i++)); canvas.drawBitmap(myBitmap, 0, 0, null); } }
自定义view电子签名
最新推荐文章于 2021-05-29 16:16:18 发布