【问题标题】:Clear canvas and draw again inside it清除画布并在其中再次绘制
【发布时间】:2019-07-27 19:36:09
【问题描述】:

我正在尝试在我的应用程序中创建一个“全部清除”按钮,但它不起作用。这是我用来创建和使用画布的代码:

public DrawingView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setLayerType(LAYER_TYPE_HARDWARE, null);
        startActivity = System.currentTimeMillis();
        setupDrawing();
    }

    public void setDimension (DisplayMetrics displaymetrics) {
        height = displaymetrics.heightPixels;
        width = displaymetrics.widthPixels;
        diameter = width;
        if (height < width){
            diameter = height;
        }
        offset = (int) (0.32*diameter);
        diameter -= offset;
        String imageName = protocol+draw;
    }

    //setup drawing
    private void setupDrawing(){

        //prepare for drawing and setup paint stroke properties
        drawPath = new Path();
        drawPaint = new Paint();
        drawPaint.setColor(paintColor);
        drawPaint.setAntiAlias(true);
        drawPaint.setStrokeWidth(5);
        drawPaint.setStyle(Paint.Style.STROKE);
        drawPaint.setStrokeJoin(Paint.Join.ROUND);
        drawPaint.setStrokeCap(Paint.Cap.ROUND);
        canvasPaint = new Paint(Paint.DITHER_FLAG);
    }

    //size assigned to view
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        drawCanvas = new Canvas(canvasBitmap);
    }

    //draw the view - will be called after touch event
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
        canvas.drawPath(drawPath, drawPaint);

        canvas.drawRect(width/2 - diameter/2 ,
                (70),
                width/2 + diameter/2,
                1100, drawPaint);
    }

这是我用来清屏的代码,但按下按钮什么也没显示:

public void restoreDraw () {
        drawPath = null;
        canvasBitmap = Bitmap.createBitmap(width, 350, Bitmap.Config.ARGB_8888);
        drawPath = new Path();
    }

我应该清除位图画布,对吗?

【问题讨论】:

    标签: java android canvas draw


    【解决方案1】:

    您必须在 restoreDraw() 方法中添加 requestLayout()。

    public void restoreDraw () {
        drawPath = null;
        canvasBitmap = Bitmap.createBitmap(width, 350, Bitmap.Config.ARGB_8888);
        drawPath = new Path();
        requestLayout();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多