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

Android 自定義 View:super.onDraw(canvas) 的作用與繪製順序

     編輯:程式設計疑難解答

直接回答

`super.onDraw(canvas)` 呼叫父類別(基類)的 `onDraw` 方法,在畫布上先繪製父類定義的內容(如背景、預設文字、選取高亮等),隨後子類別可繼續繪製自己的內容,實現「基類打底、子類疊加」的繪製鏈。

典型使用場景

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas); // 1. 先讓 TextView 畫出文字、背景、drawable 等
    // 2. 子類自定義繪製:如加底線、畫波浪線、繪製圖表覆蓋層
    canvas.drawLine(0, getHeight()-2, getWidth(), getHeight()-2, mUnderlinePaint);
}

若省略 super.onDraw() 會發生什麼?

  • 父類繪製邏輯完全被跳過:背景不顯示、文字不繪製、預設 drawable 消失。
  • 若子類完全接管繪製(如自定義 `SurfaceView` 遊戲迴路),可不呼叫;但繼承 `View`/`TextView`/`Button` 等高階 Widget 時,**強烈建議保留**。

繪製順序原則

  1. 父類 `onDraw`(背景 → 內容 → 前景)
  2. 子類額外繪製
  3. 子類 `dispatchDraw`(若為 ViewGroup,繪製子 View)
  4. `onDrawForeground` (API 23+) 繪製滾動條、前景 drawable

結語

`super.onDraw(canvas)` 是 Android View 繪製機制中「模板方法模式」的體現:父類定義繪製骨架,子類在特定擴展點注入自定義邏輯。保留呼叫,才能兼容框架演進與無障礙功能。

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