解决方案 »
- AlarmManager setRepeating问题
- android求解歌词同步
- 跪求:数据库拷贝到哪里?
- android mediaplayer 循环播放视频问题
- android2.2装完FLASH10.1播放优酷,土豆在线视频无声。
- 新建空的android应用工程报错R cannot be resolved to a variable
- 有关android疯狂讲义!!速来大神
- android studio导入github上的项目的问题?
- [Android]这样到底会不会造成内存泄露?
- android与后台服务器的前后端通信
- 手机文件夹加密
- BroadcastReceiver中能否进行Socket通信
at com.zl.android.game.LogoImp.onDraw(LogoImp.java:64)LogoImp类的64行有错哦,非法状态
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.基本上是这样的。
你可以看一下,肯定是由你canvas.setBitmap(Bitmap);这个方法造成的。
解决方法如4楼说的。如果你调用的是new Canvas();那么接下来在未调用其它方法前必需mCanvas.setBitmap(bgBitmap)才行。且不可多次调用setBitmap。