自定義 View 使用 PorterDuffXfermode 繪製圖形,初始背景為白色。但當 Activity 啟動下一個 Activity 再返回時,原本白色的背景變成透明。這是因為 View 重繪時未顯式指定背景繪製邏輯,導致畫布預設透明。
onDraw(Canvas canvas) 中若未先繪製背景色,Canvas 預設為透明。切換 Activity 觸發 onStop() → onRestart() → onStart() → onResume(),View 會重新 invalidate() 並呼叫 onDraw,若邏輯只繪製前景圖形,背景自然變透明。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); // 關鍵:讓父類繪製背景(若有設定 android:background)
// 或手動繪製純色背景
canvas.drawColor(Color.WHITE); // 強制白色背景
// 原有繪圖邏輯...
paint.setColor(Color.WHITE); // 確保 Paint 顏色正確
// 使用 PorterDuffXfermode 等混合模式繪製
}
android:background="@android:color/white",並呼叫 super.onDraw(canvas)。onDraw 開頭加 canvas.drawColor(bgColor),完全掌控背景色。PorterDuffXfermode,注意 Paint 的 setXfermode 僅影響後續繪製操作,背景繪製應在設定 Xfermode 前完成。自定義 View 繪圖務必在 onDraw 首行處理背景,否則 Activity 生命週期切換會導致畫布重置為透明。一行 canvas.drawColor() 或 super.onDraw() 即可徹底解決。