自定義控制項入門實踐之雷達掃瞄控制項

2021-07-15 19:48:08 字數 2155 閱讀 7670

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布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...