2015-12-30 11:12
278人閱讀收藏
舉報
奇妙控制項(4)
以前因為工作的關係,對於自定義控制項用的少之又少,無非就是把幾個控制項放置到viewgroup內部,然後提供開放方法,就成了乙個所謂的自定義控制項,但是這種小伎倆太簡單,面試的時候這點東西根本hold不住場,所以工作之餘還是得把這塊補補,也好加深一下對控制項的理解。
好,囉嗦了挺多的,我們先看一下實現的效果:
只是擷取了一部分執行時圖,這個控制項只是重寫了ondraw方法,其它一一保留給view,簡單說一下這個的實現方式:
使用乙隻畫筆用來畫等距的四個圓,使用另外乙隻畫筆畫乙個標準的角度漸變圖。
android提供了標準的漸變圖,同樣在photoshop中我們一樣可以找到這些漸變圖,這樣一來,我們就可以根據ui設計師設計的套路來做同樣的效果了:
線性漸變圖
徑向漸變圖
菱形漸變圖
角度漸變圖
對稱漸變圖
好了,我們將這些基本的圖繪製出來之後,它還是個靜態的,我們需要將它動起來,那怎麼使它動起來呢,對,我們需要執行緒來驅動它進行重繪,需要注意的是,執行緒一定要出口。
開啟執行緒有兩種方式,一種是傳統的開執行緒的方式,使用thread。另一種則使用向主線程訊息佇列中傳送訊息來驅動。我們使用第二種:hander.postrunnable。
來貼一下整體的**:
import android.content.context;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.matrix;
import android.graphics.paint;
import android.graphics.shader;
import android.graphics.sweepgradient;
import android.util.attributeset;
import android.view.view;
/** * 雷達顯示控制項
* created by sahadev on 2015/12/29.
*/public class radarview extends view implements runnable
public radarview(context context, attributeset attrs)
public radarview(context context, attributeset attrs, int defstyleattr)
@override
protected void ondraw(canvas canvas)
@override
public void run()
}@override
protected void ondetachedfromwindow()
}
好,這樣執行起來就是我們圖例所顯示的樣子,最後看一下記憶體使用以及cpu使用情況:
都不是很多,這只是最基本的,我們還可以將它進一步的優化。
Android自定義View實現雷達掃瞄動畫
前言 類似社交軟體的雷達搜尋 mainactivity public class mainactivity extends activity else classname radarsweep description 雷達掃瞄動畫重新整理執行緒類 private class radarsweep i...
Android自定義控制項之自定義組合控制項(三)
前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...
Android自定義控制項之自定義組合控制項
前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...