本帖最后由 mic47 于 2011-06-18 16:24:48 编辑

解决方案 »

  1.   

    at android.graphics.Canvas.setBitmap(Canvas.java:144)
    at com.zl.android.game.LogoImp.onDraw(LogoImp.java:64)LogoImp类的64行有错哦,非法状态
      

  2.   

    不知道这个问题是否解决了。我今天2012-8-1也遇到了同样的问题。现已经解决。分享一下:
    Root cause:
    Canvas.setBitmap 会先判断 bitmap.isMutable() 如果为false 就会抛出java.lang.IllegalStateException 异常。
    那么 isMutable() 究竟是什么意思?意思是 不可以修改的意思。也就是说这个 bitmap只能被用来canvas.draw(), 如果使用canvas.setBitmap()就意味着这个bitmap是要修改的 因为canvas会向这个bitmap上绘制。具体的解决方案:
    1 如果你的bitmap是 isMutable()的,那么 你不要调用setBitmap要调用drawBitmap
    2 如果你真的要修改你的bitmap,那可以使用 bitmap.copy 这个函数来copy一个 这时候可以指定mutable参数。注意事项:
    注意当你使用bitmap.copy的时候,意味着内存中有多张bitmap这可能会产生outofmemory.那么是否可以直接改变 isMutable呢不可以,这个变量是final类型的。是否可以使用 createBitmap(oriSrc) 这个函数也是无法返回非isMutable bitmap的。如果是isMutable,那么直接返回参数中传进来的 oriSrc.基本上是这样的。
      

  3.   

    感觉还是没说清楚怎么建立一个mutable的位图啊?
      

  4.   

    4楼说得好!我今天也碰到了。
    你可以看一下,肯定是由你canvas.setBitmap(Bitmap);这个方法造成的。
    解决方法如4楼说的。如果你调用的是new Canvas();那么接下来在未调用其它方法前必需mCanvas.setBitmap(bgBitmap)才行。且不可多次调用setBitmap。