如何在android的onDraw方法中存储画布?

如何在android的onDraw方法中存储画布?,android,android-canvas,Android,Android Canvas,我试图在android的onDraw方法中保存和恢复画布,但使用这段代码无法正常工作。我发现,只有最后一行显示为“以前未淹没” 请告诉我,我的代码如下 public void setMData(Float pData, Float cData, int i){ this.pData = pData; this.cData = cData; this.i = i; } public void onDraw(Canvas canvas) { super

我试图在android的onDraw方法中保存和恢复画布,但使用这段代码无法正常工作。我发现,只有最后一行显示为“以前未淹没” 请告诉我,我的代码如下

public void setMData(Float pData, Float cData, int i){


    this.pData = pData;
    this.cData = cData;
    this.i = i;

}

public void onDraw(Canvas canvas)

 {


    super.onDraw(canvas);
    canvas.restore();
    hs = getHeight();
    ws = getWidth();
    paint.setTextSize(15);
    paint.setColor(Color.parseColor("#00FFCC"));
    paint.setStrokeWidth(2);
    ox = 30;
    oy = hs - 30;
    canvas.drawLine(30, 30, 30, hs - 30, paint); // Vertical Line
    canvas.drawLine(30, hs - 30, ws - 30, hs - 30, paint); // Horizontal
    canvas.drawText("(0,0)", 10, hs - 10, paint);
    float secWidth = 20;// (ws-30)/mData.size();
    float pRatio = oy / 100 * pData;
    float cRatio = oy / 100 * cData;
    canvas.drawLine(secWidth * i, hs - pRatio, secWidth * (i + 1), hs - cRatio,paint);
    canvas.drawText("" + cData, secWidth * (i + 1), hs - cRatio, paint);
    canvas.save();
}
试试这个:

int saveCount; //declare this as a field

saveCount = canvas.save();
.....
canvas.restoreToCount(saveCount);

“canvas”是局部变量还是字段?您在哪里声明了“canvas”?我的意思是它是一个字段还是一个局部变量?还可以尝试使用invalidate()/postInvalidate();很抱歉,这是不带canvas.save()和canvas.restore()的解决方案。非常感谢您的帮助。也许您可以与我们共享您的解决方案?我是第一个使用float创建arraylist并存储数据的人,并使用invalidate()使其不成问题,但奇怪的是这些方法不起作用,迫使您使用消耗额外内存的方法。在android开发者的博客上报告您的案例:)