首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 自定義 View 繪圖:Activity 切換返回後背景變透明?直接設定 Paint 背景色

     編輯:程式設計綜合問答

自定義 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 等混合模式繪製
}

最佳實踐

  1. 在 XML 佈局中給自定義 View 設定 android:background="@android:color/white",並呼叫 super.onDraw(canvas)。
  2. 或在 onDraw 開頭加 canvas.drawColor(bgColor),完全掌控背景色。
  3. 若使用 PorterDuffXfermode,注意 Paint 的 setXfermode 僅影響後續繪製操作,背景繪製應在設定 Xfermode 前完成。

結語

自定義 View 繪圖務必在 onDraw 首行處理背景,否則 Activity 生命週期切換會導致畫布重置為透明。一行 canvas.drawColor() 或 super.onDraw() 即可徹底解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved