在android 4.3中恢复下溢

我得到一个IllegalStateException:在恢复exception下溢,这是导致我的应用程序崩溃。 这开始发生在android 4.3更新之后。 在Android 3.0 – 4.2.x它工作正常。

第二个例外发生

canvas.restore(); 

下面给出的是我的绘图代码

 private void doDraw(Canvas canvas) { if(mTickerBackGround!=null && (!mTickerBackGround.isRecycled())){ canvas.drawBitmap(mTickerBackGround, 0, 0, null); } if((mBitMapBuffer!=null)){ canvas.save(); canvas.translate(mX, 0); if(!mBitMapBuffer.isRecycled()){ canvas.drawBitmap(mBitMapBuffer, 0, 0, null); } canvas.restore(); if(bitMapWidth+mX<mCanvasWidth){ canvas.translate(bitMapWidth+mX, 0); if(!mBitMapBuffer.isRecycled()){ canvas.drawBitmap(mBitMapBuffer, 0, 0, null); } canvas.restore(); } if(bitMapWidth+mX<=0){ mX = 0; }else if(Math.abs(mX)>(bitMapWidth)){ mX= mCanvasWidth; } mX-=TickerConstants.SCROLLING_SMOOTHNESS*density;; } if(mLogo!=null && (!mLogo.isRecycled())){ canvas.drawBitmap(mLogo, mCanvasWidth-(60*density), mLogo.getHeight()/6, null); } } 

我的问题是

  1. 这个错误是什么意思?
  2. 我如何解决这个错误?

产生的堆栈跟踪消息是。 第165行对应第二个canvas.restore()

08-13 18:13:09.083:E / AndroidRuntime(14139):致命的例外:Thread-506 08-13 18:13:09.083:E / AndroidRuntime(14139):java.lang.IllegalStateException:在还原中的下溢08-13 18:13:09.083:E / AndroidRuntime(14139):在android.graphics.Canvas.restore(本地方法)08-13 18:13:09.083:E / AndroidRuntime(14139):在com.my.package.name。 ticker.TickerSurfaceView $ TickerThread.doDraw(TickerSurfaceView.java:165)08-13 18:13:09.083:E / AndroidRuntime(14139):在com.my.package.name.ticker.TickerSurfaceView $ TickerThread.run(TickerSurfaceView.java :128)

Solutions Collecting From Web of "在android 4.3中恢复下溢"

错误是在你的代码的这一部分:

  if(bitMapWidth+mX<mCanvasWidth){ canvas.translate(bitMapWidth+mX, 0); if(!mBitMapBuffer.isRecycled()){ canvas.drawBitmap(mBitMapBuffer, 0, 0, null); } canvas.restore(); } 

您正在调用restore()而不先调用save() 。 你甚至不需要调用translate() ,你可以传递x和y坐标到drawBitmap()调用。

public void restore()

在API级别1中添加此调用将先前调用save(),并用于移除自上次保存调用以来对matrix/剪辑状态的所有修改。 调用restore()多于调用save()的次数是错误的。