在 android 應用開發裡面,ui是非常重要的一部分,一般情況下,你使用自帶控制項,再加上一些開源庫,已經能夠實現大部分的ui效果了,但是對於一些比較花哨比較新穎的效果,,往往需要通過自定義view來實現,自定義view 每個人多多少少都會一點,,但是完全掌握的人卻不多,在這我說的這個完全掌握,指的是給你乙個任意的設計,只要這個設計是android能夠做到的,你只要能夠給做出來,全能給實現,那麼這個就是我說的完全掌握自定義view,說到這兒,可能有人覺得,你說的這個標準太高了,不現實啊,,我要學習你這個程度,他需要你花的時間和精力都太多了,但其實要掌握自定義view,真的沒有那麼難,你只要掌握它的三個關鍵的知識點,布局,繪製和觸控反饋,也就是對於乙個介面來說,它裡面的控制項,怎麼把它們 用正確的大小,擺放到正確的位置,顯示出正確的內容,以及對使用者的一些觸控操作給出正確的反饋,就這麼點東西
所謂繪製,指的就是控制項內容的顯示,什麼意思呢?我們作為軟體的開發者,控制項顯示什麼內容肯定是由我們來控制的.但是一般情況下,我們並不是直接操作繪製這些繪製內容,而是通過api對控制項進行設定,然後控制項自己完成繪製過程,例如:你通過一行 settext() ,把文字設定給textview,它自己會負責顯示在合適的位置,至於文字的起始座標,從哪個字開始自動換行,換行之後怎麼保證行與行之間依然對齊的,這些你都不用關注,而自定義繪製指的就是由你來接管這個繪製過程,去操作這些繪製細節以此來顯示本來自帶控制項顯示不出的內容,例如:你要做乙個統計**,如果要純文字的顯示,那使用自帶控制項很容易就能做出來,但如果要你用直方圖,那自帶控制項做起來就有點麻煩了,就算能做出來,比如:relativelayout 加上一堆控制項硬是給拼出來了,也是很複雜的,而且效能可能會出問題,假如我再換乙個,換成餅圖呢?自帶控制項就完全做不出來了.而不管是直方圖還是餅圖,還是其他各種各樣簡單複雜的介面,使用自定義繪製都能很輕鬆的繪製出來,這個就是自定義繪製的作用,下面我簡單說一下自定義繪製的實現,android裡的繪製是在每乙個 view 繪製方法裡發生的 ,乙個 view 的繪製方法裡面寫了什麼**,他就會繪製什麼內容,而自定義繪製就是通過重寫繪製方法,插入你自己的繪製**來實現的,繪製方法不是乙個方法,有好幾個,其中最常見的叫做 ondraw() ondraw()這個繪製方法,它負責 view 的主體的繪製,例如:textview 的文字,imageview 的影象,都是 ondraw () 裡繪製的,具體執行繪製操作的是 ondraw() 裡面的canvas 引數,例如:你寫一行 canvas.drawcicle() 你的view 就會在內部 畫乙個圓,顯示給使用者看,這個canvas 是什麼?從名字來看: 畫布,現實中的畫布是畫的載體,你把畫畫在畫布上 對吧,而在android裡面,canvas 就是乙個繪製工具,它唯一的功能就是繪製,drawcicle 只是乙個例子,canvas 能畫的非常多,方塊 三角 ,不規則圖形,,文字都可以,實際上你所見過的android 應用中的介面 ,幾乎全部是用canvas繪製的,除了 一些3d 遊戲會用到 opengl ,所以只要掌握了 canvas,你就基本上能做出所有的介面了,好!簡單說一下canvas
另外:除了直接繪製,canvaus 還有 兩類, 一類是繪製範圍的裁切,這個很好理解,你通過裁切來把繪製限制在某個範圍內,然後當你繪製的時候,超出部分會被切掉,不會顯示出來,這些方法全部以
clip- 開頭,使用也很簡單
另一類是繪製內容的集合變換,什麼是幾何變換呢,我舉個例子,放大縮小就是幾何變換的一種,平移和旋轉也是幾何變換,還有錯切 水平錯切 垂直錯切.那麼具體有哪些變換呢?你可以這麼想一下.把你繪製區域的四個頂點任意拉扯,繪製的內容就會發生相應的變化.這些拉扯所對應的所有形變都是幾何變換,這些奇形怪狀的變換你別覺得沒有用, 3d 繪製的 模擬 就是用他們做的 , 比如乙個頁面 像紙一樣 翻起來的效果,其實就是吧繪製區域做了兩個頂點的拉伸,以及高度的壓縮,好 前面說的就是自定義繪製最核心的技巧 . 重寫 ondraw 方法 ,在裡面用canvas 的一些 方法進行繪製, 配合上 範圍內 和幾何變換,來達到想要的效果 會了這些,你就會想畫什麼就畫什麼了.不過,還有乙個問題:繪製順序,假設你寫了乙個自定義layout ,重寫她的 ondraw() ,然後在裡面畫了一些想要的東西 ,之 後你會發現,當新增了子view之後,繪製的內容會被子view給蓋住,如果這是你想要的這樣沒有問題,但如果你期望的是他蓋住子view,那麼,而不是被子view蓋住呢?android裡面的繪製是按順序的,先繪製的內容會被後繪製的蓋住,前面我說了繪製方法不是只有乙個,有好幾個,其中ondraw()方法只是負責主題內容的繪製,另外還有一些方法有負責繪製背景的,有負責繪製前景的,有負責整體內容繪製的, 他們在整個繪製過程中都處於各自不同的繪製步驟,也就是不同的步驟,如果你對你的遮蓋關係有你的特殊要求,那麼你就需要了解這個步驟,去了解它們每乙個繪製方法處於這個繪製過程的哪乙個位置.然後,在實際使用過程中,你就知道自己應該選擇哪乙個繪製方法來重寫,從而達到你想要的繪製效果,好,自定義繪製大概就是這樣,現在,我簡單的總結一下:
自定義繪製的繪製方式:
使用不同繪製方法來控制遮蓋關係
android view繪製過程
簡單描述可以解釋為 計算大小 measure 布局座標計算 layout 繪製到螢幕 draw 下面看看每一步的動作到底是什麼,第一步 當activity啟動的時候,觸發初始化view過程的是由window物件的decorview呼叫view 具體怎樣從xml中讀取是用layoutinflater....
android View繪製流程
android的view的繪製流程大概就如同我們作畫一樣,分為以下幾步 1.測量出每個view的大小。2.根據上一步測量得到的大小,確定view繪製的座標位置。3.有了具體的位置及view大小,開始繪製view。我們的activity在建立的時候就會對應的建立乙個window,用於展示我們需要展示的...
Android View 如何繪製
上文說道了android如何測量,但是乙個漂亮的控制項我只知道您長到哪兒,這當然不行。只需要簡單重寫ondraw方法,並在canvas 畫布 物件上呼叫那根五顏六色的畫筆就能夠畫出這控制項 的外表。那麼view又是如何進行繪製了?要了解view如何繪製,就需要了解canvas 畫布 是什麼?pain...