遇到的問題
先貼問題代碼:
public void setmBitmap(String path){
mBitmap = BitmapFactory.decodeFile(path); //這里有錯
mCanvas.setBitmap(mBitmap);
invalidate();
}
就是這段小小的代碼,讓我調(diào)試了兩個鐘頭霹俺,(哭...
分析
調(diào)試一下就會發(fā)現(xiàn)問題,直接上圖:
有一個Bitmap.isMutable()方法毒费,那這個方法代表著什么呢丙唧?
官方給的解釋:
Returns true if the bitmap is marked as mutable (i.e. can be drawn into)
返回這個Bitmap是否可以被繪制。
也就是說Bitmap里面一個boolean的變量觅玻,標(biāo)志著是否能夠繪制該Bitmap想际。
簡單查看一下源碼就能得到一個變量:
private final boolean mIsMutable;
也就是說,通過BitmapFactory.decodeFile()方法得到的bitmap是一個無法被繪制的溪厘。
問題已經(jīng)找出來了胡本,那就自然而然的能解決啦!
解決
既然是因為bitmap的內(nèi)部字段mIsMutable為false導(dǎo)致的畸悬,那我們就改變一下這個變量的值侧甫,讓它變?yōu)閠rue。
通過查詢蹋宦,使用Bitmap.copy()方法
這個方法返回一個新的Bitmap披粟,只需要把第二個參數(shù)設(shè)置為true:
mBitmap = BitmapFactory.decodeFile(path).copy(Bitmap.Config.ARGB_8888, true);
問題就解決啦