Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自定義View的一些不知道的細節

Android自定義View的一些不知道的細節

編輯:關於Android編程

原因:

之所以寫這個主要是因為我自認為自己對自定義View已經了如指掌,但是後來才發現自己犯了很多低級錯誤。

詳解:

按照源碼的注釋,View的繪制過程是這樣子的:
        /*
         * Draw traversal performs several drawing steps which must be executed
         * in the appropriate order:
         *
         *      1. Draw the background
         *      2. If necessary, save the canvas' layers to prepare for fading
         *      3. Draw view's content
         *      4. Draw children
         *      5. If necessary, draw the fading edges and restore layers
         *      6. Draw decorations (scrollbars for instance)
         */

先繪制背景,如果有必要,保存畫布層,繪制內容,繪制孩子,繪制漸變,繪制裝飾物。 讓我們再看下源碼的draw()方法裡的一段代碼
  if (!verticalEdges && !horizontalEdges) {
            // Step 3, draw the content
            if (!dirtyOpaque) onDraw(canvas);

            // Step 4, draw the children
            dispatchDraw(canvas);

            // Step 6, draw decorations (scrollbars)
            onDrawScrollBars(canvas);

            // we're done...
            return;
        }
從這裡我們可以看出draw方法的調用過程是這樣子。
onDraw -> dispatchDraw -> onDrawScrollBars
這樣我們基本可以明白我們重寫的onDraw方法是干什麼的了,以及draw() ondraw() dispatchdraw的關系了。 如果你想在最頂層繪制,直接重寫draw方法,因為draw方法裡包含ondraw和dipatchdraw。 其實主要想寫的一個細節就是這個東西。 如果你想讓你繪制的東西一直在控件的某個位置一定要這樣寫 canvas.translate(getScrollX(), getScrollY());
這裡就不解釋了,明白了我之前說的就知道為什麼要這麼寫了。我重寫了listview然後發現我寫的控件會出現跳幀現象,就是在滑動的時候出現fading edges的時候,後來才發現是因為這個原因。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved