当我在图形中自行添加位图以进行编辑时,橡皮擦在擦除后设置黑色

时间:2019-02-16 06:58:08

标签: java android

        [//I am setting bitmap for editing but the problem is everything working great but when i open canvas again for edit the eraser convert erase part into black and does not work and I press save button then it whole screen convert into black. 
        public class DrawingView extends View{

            // To hold the path that will be drawn.
            private Path drawPath;
            // Paint object to draw drawPath and drawCanvas.
            public Paint drawPaint, canvasPaint;
            // initial color
            private int paintColor = 0xff000000;
            private int previousColor = paintColor;
            // canvas on which drawing takes place.
            public Canvas drawCanvas;
            // canvas bitmap
            public Bitmap canvasBitmap;
            // Brush stroke width
            private float brushSize, lastBrushSize;
            // To enable and disable erasing mode.
            private boolean erase = false;


            public DrawingView(Context context, AttributeSet attrs){
                super(context, attrs);
                setUpDrawing();
            }

            public void addBitmap(Bitmap bitmap){
                canvasBitmap = bitmap;
        //        reset();
        //        drawPath.reset();
        //        drawPaint.setColor(Color.BLACK);
                invalidate();
            }

            /**
             * Initialize all objects required for drawing here.
             * One time initialization reduces resource consumption.
             */
            private void setUpDrawing(){
                drawPath = new Path();
                drawPaint = new Paint();
                drawPaint.setColor(paintColor);
                // Making drawing smooth.
                drawPaint.setAntiAlias(true);
                drawPaint.setStyle(Paint.Style.STROKE);
                drawPaint.setStrokeJoin(Paint.Join.ROUND);
                drawPaint.setStrokeCap(Paint.Cap.ROUND);

                canvasPaint = new Paint(Paint.DITHER_FLAG);

                // Initial brush size is medium.
                brushSize = getResources().getInteger(R.integer.medium_size);
                lastBrushSize = brushSize;
                drawPaint.setStrokeWidth(brushSize);
            }

            @Override
            protected void onSizeChanged(int w, int h, int oldw, int oldh) {
                super.onSizeChanged(w, h, oldw, oldh);

                if (canvasBitmap == null){

                    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
                }
                drawCanvas = new Canvas(canvasBitmap);
            }

            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
        //        canvas.drawColor(Color.WHITE);

                canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
                canvas.drawPath(drawPath, drawPaint);
        //        super.dispatchDraw(canvas);

            }

            @Override
            public boolean onTouchEvent(MotionEvent event) {
                // X and Y position of user touch.
                float touchX = event.getX();
                float touchY = event.getY();
                // Draw the path according to the touch event taking place.
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        drawPath.moveTo(touchX, touchY);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        drawPath.lineTo(touchX, touchY);
                        break;
                    case MotionEvent.ACTION_UP:
                        if (erase){
                            drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
                            drawPaint.setColor(Color.WHITE);
                        }
                        drawCanvas.drawPath(drawPath, drawPaint);
                        drawPath.reset();
                        drawPaint.setXfermode(null);
                        break;
                    default:
                        return false;
                }

                // invalidate the view so that canvas is redrawn.
                invalidate();
                return true;
            }

            public void setColor(String newColor){
                // invalidate the view
                invalidate();
                paintColor = Color.parseColor(newColor);
                drawPaint.setColor(paintColor);
                previousColor = paintColor;
            }

            public void setBrushSize(float newSize){
                float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                        newSize, getResources().getDisplayMetrics());
                brushSize=pixelAmount;
                drawPaint.setStrokeWidth(brushSize);
            }

            public void setLastBrushSize(float lastSize){
                lastBrushSize=lastSize;
            }
            public float getLastBrushSize(){
                return lastBrushSize;
            }

            public void setErase(boolean isErase){
                //set erase true or false
                erase = isErase;
                if(erase) {
                    drawPaint.setColor(Color.WHITE);
                    //drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
                }
                else {
                    drawPaint.setColor(previousColor);
                    drawPaint.setXfermode(null);
                }
            }

            public void startNew(){
                drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
                invalidate();
            }

            public void reset(){
                drawPaint.reset();
                drawPath.reset();
                drawCanvas.drawColor(Color.WHITE);
                invalidate();
                setUpDrawing();
            }
        }

           // in main activity

         if (datadtlimgsItem != null && datadtlimgsItem.getImageStr() != null) {
                decodedString = Base64.decode(datadtlimgsItem.getImageStr(), Base64.DEFAULT);
                decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
                decodedByte = Util.resize(decodedByte, 1500, 1500);
                mDrawingView.addBitmap(decodedByte);

This image is showing the eraser in black color I have tried to remove that line but it is not erasing the specific area. I want to remove you can check in the details. I have tried to reset paths and set color on size changed and onDraw canvas but it is not working. Moreover when I click saved button I have set the method startNew() but when I come from edit screen, screen turns black after save otherwise everything working perfect.         我正在主要活动中动态设置位图,以编辑旧位图,第一次一切都运行良好,但是当我从下一个屏幕返回到上一个屏幕并设置动态位图橡皮擦时,将停止工作并在已擦除区域上设置黑色。

  This image is showing the eraser in black color I have tried to remove that line but it is not erasing the specific area. I want to remove you can check in the details. I have tried to reset paths and set color on size changed and onDraw canvas but it is not working. Moreover when I click saved button I have set the method startNew() but when I come from edit screen, screen turns black after save otherwise everything working perfect.

0 个答案:

没有答案