解決方案
不應(yīng)該將getDrawable的值拿來當(dāng)?shù)谝粚覦rawable, 而是先判斷一下這個(gè)值的類型,
如果是TransitionDrawable, 應(yīng)該獲取它第二層Drawable作為我們的第一層,
這樣原來的第一層Drawable就會(huì)失去到GC Roots的引用鏈, 從而可以被回收
Drawable oldDrawable = mShutterButton.getDrawable();
Drawable oldBitmapDrawable;
if (oldDrawable == null) {
oldBitmapDrawable = new ColorDrawable(Color.TRANSPARENT);
} else if (oldDrawable instanceof TransitionDrawable) {
oldBitmapDrawable = ((TransitionDrawable) oldDrawable).getDrawable(1);
} else {
oldBitmapDrawable = oldDrawable;
}
TransitionDrawable transitionDrawable = crossfadeDrawable(
oldBitmapDrawable,
getResources().getDrawable(resId));
mShutterButton.setImageDrawable(transitionDrawable);