自定義View之動態音訊條

2021-07-07 02:08:01 字數 1988 閱讀 2111

先看一下demo圖

思路很簡單,就是繪製乙個個的矩形,每個矩形之間稍微偏移一點距離即可。

@override

protected

void

ondraw(canvas canvas)

postinvalidatedelayed(300);

}

其中,currentheight就是每個小矩形的高,通過橫座標的不斷偏移,就繪製出了乙個個靜態的小矩形。每個小矩形的高通過math.random()的方法來隨機改變這些高度值,在通過postinvalidatedelayed(300),每隔0.3秒通知view進行重繪。

這裡需要注意一點的就是畫矩形的問題,canvas.drawrect的前4個引數到底是什麼意思,一開始我一直沒弄清楚,以為要畫的矩形是在乙個座標軸的右邊,所有的資料都是距離原點的距離,但是這顯然是錯誤的,正確的應該使用android座標系和檢視座標系(以原點向右為x的正方向,以原點向下是y軸的正方向),這裡的4個引數主要是根據手機螢幕,確切的說是父控制項而言:

第乙個和第三個引數是距離父控制項的左邊的距離

第二個個第四個引數是距離父控制項的上端的距離

盜用別人的一張圖說明一下:

這裡是canvas.drawrect(150,75,260,120);

另外,再給繪製的paint物件增加乙個lineargradient漸變效果,這樣不同高度的矩形就會有不同顏色的漸變效果。

**如下:

@override

protected

void

onsizechanged(int w, int h, int oldw, int oldh)

最後,貼出全部**:

import android.content.context;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.lineargradient;

import android.graphics.paint;

import android.graphics.shader;

import android.util.attributeset;

import android.view.view;

/** * user: picasso([email protected])

* date: 2015-11-09

* time: 10:37

* fixme

*/public

class

volumeview

extends

view

public

volumeview(context context, attributeset attrs)

public

volumeview(context context, attributeset attrs, int defstyleattr)

private

void

initview()

@override

protected

void

onsizechanged(int w, int h, int oldw, int oldh)

@override

protected

void

ondraw(canvas canvas)

postinvalidatedelayed(300);

}} 當我看完這個的時候,我想之前分享的mpandroidchart繪製圖表應該自己也會繪製了。

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

自定義view 進度條

廢話不多說先看效果圖 效果圖 原諒模擬器顯示的不好看,為了錄gif圖,只能用模擬器 乙個背景,乙個進度,乙個進度值顯示,進度條與文字顯示的高度是1 2,其中用到了drawroundrect用來畫帶圓角的矩形,空心與實心都是paint的屬性設定的,drawtext用來畫文字 注意點 1.進度條進度滿進...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...