位图onDraw()不更新

时间:2018-09-09 16:44:14

标签: android draw

我试图在视图上显示一个蓝色正方形,然后在之后显示一个红色正方形。

问题在于,当它应该绘制一个蓝色正方形时,它没有绘制任何东西,但是当它应该绘制一个红色正方形时,它没有绘制任何蓝色正方形。

我在这里想念什么?

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if(runCount == 1)
    {
        // Color blue and save bitmap
        blueCanvas = new Canvas();
        blueBitmap = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.RGB_565);
        canvas.drawRect(0, 0 , 200, 300, bgPaintBlue);
    }
    if(runCount == 2){
        // Color red
        redCanvas = new Canvas();
        redBitmap = Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(),Bitmap.Config.RGB_565);
        canvas.drawRect(0, 0 , 200, 300, bgPaintRed);
    }
    runCount++;
    invalidate();
}

2 个答案:

答案 0 :(得分:1)

直接从文档中获取

  

公共无效无效()

     

使整个视图无效。如果该视图可见,则将来会在某个时候调用onDraw(android.graphics.Canvas)。

https://developer.android.com/reference/android/view/View.html#invalidate()

如前所述,您在onDraw方法本身内部调用了invalidate,因此它创建了一个无限循环。同时,您也在其中更新runCount,因此它会不断增加该变量。

尽管我不确定您到底想做什么,但我建议至少删除该语句

invalidate();

从onDraw方法内部重新思考您的设计。只要引用了该视图,就可以从程序的其他位置调用无效,但是请确保该调用位于UI(主)线程上。

答案 1 :(得分:0)

如果要在画布上绘制位图,则需要将位图附加到画布上,然后根据需要快速绘制。

    private Bitmap canvasBitMap = null;
    private Canvas bitmapCanvas = null;
      @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);


    int paddingLeft = getPaddingLeft();
    int paddingTop = getPaddingTop();
    int paddingRight = getPaddingRight();
    int paddingBottom = getPaddingBottom();

    int contentWidth = getWidth() - paddingLeft - paddingRight;
    int contentHeight = getHeight() - paddingTop - paddingBottom;

    mgraphWidth     = contentWidth;
    mgraphHeight    = contentHeight;

    if(canvasBitMap == null)
    canvasBitMap = Bitmap.createBitmap(mgraphWidth, mgraphHeight, Bitmap.Config.ARGB_8888);

    if(bitmapCanvas == null)
        bitmapCanvas = new Canvas(canvasBitMap);

    canvas.drawBitmap(canvasBitMap,0,0,mgraphcolor);

    drawGraph(bitmapCanvas);
}

您可以使用此完整的GitHub代码通过CustomView了解图形/ UI绘图。

分叉此存储库并将其用作样板。

https://github.com/Teju068/Android_Tutotrial