自定義view 結合刻度盤學習

2022-07-18 06:24:15 字數 3339 閱讀 6251

先上效果圖

一、view的測量(刻度盤的大小測量)

在現實生活中,我們如果要去畫乙個圖形,那麼便要知道它的大小和位置。所以android繪圖時需要我們對view進行測量。android為我們提供了onmeasure()方法來幫助我們去測量乙個view,我們只需要重寫onmeasur()方法,將我們測算長寬設定給setmeasureddimension()。

@override

protected

void onmeasure(int widthmeasurespec, int

heightmeasurespec)

我們首先測量我們最開始弧形的大小。即圖中的樣例。

二、view的繪製(簡單繪製出我們需要的弧形)

測算完成後我們需要將他在畫面上顯示出來,android為我們提供了ondraw()方法,來繪製view。

@override

protected

void

ondraw(canvas canvas)

不了解canvas的可以去看看canvas的繪製api

現在在布局檔案中設定後,就可以看見我們最開始的view了。

三、完善我們的繪製,為儀錶盤新增刻度。

private

void

drawviewline(canvas canvas)

else

hasdraw +=rotateangle;

canvas.rotate(rotateangle);

}//操作完成後恢復狀態

canvas.restore();

}

如圖

四、完善onmeasure()測量

我們先看看在布局中的circleview

原先

如圖

改成button

android:layout_width="match_parent"android:layout_height="match_parent"

/>

現在,我麼修改circleview改為wrap_content,如圖

可以發現沒有改變

對比button的wrap_content可以發現如圖,

所以我們需要在onmeasure()方法中,對view的模式進行區別測量。

五、measurespec類

android系統為我們提供了乙個短小精悍的類measurespec。它是乙個32位的int值,高兩位為測量模式,低30位為測量大小。

測量模式分為三種:

1、exactly--系統的預設模式。

精確模式,當我們將width和height指定100dp、200dp等精確值時或是match_parent屬性時系統使用exactly模式

2、at_most

最大值模式,當height和width屬性指定為wrap_content時,控制項大小隨子控制項或內容的變化而變化,控制項大小只要不超過父控制項允許的最大尺寸即可。

3、unspecified

不指定大小測量模式,view想多大就多大,通常在繪製自定義view時才會用。

將onmeasure()方法進行修改,適應wrap_content

六、自定義屬性

我們在xml檔案中使用的時候往往會使用一些屬性類似width和height等等,那麼我們便需要為我們的刻度盤新增新的屬性。

"

circleview

">

"pointdisarc

" format="

dimension

">

"textsize

" format="

dimension

">

在構造方法中處理

public circleview(context context, attributeset attrs, int

defstyleattr)

private

void parseattr(context context, attributeset attrs, int

defstyleattr)

android:id="@+id/cicleview"android:layout_width="match_parent"android:layout_height="match_parent"circle:textsize="20sp"circle:pointdisarc="20dp"

/>

到目前為止view的自定義差不多完成了,也可以將刻度盤設計的更加精巧一些,下一節開始viewgroup的繪製,涉及到新的方法onlayout()。

demo

android 網速刻度盤 自定義view一

第一次寫部落格,有點小激動,哈哈。這個是網速顯示刻度盤的乙個功能,我找了很多資料都沒有合適的,就只有自己寫了,找的資料基本都是只有半個圈的刻度盤,並且刻度顏色變化也很少,都是圓弧在變色,所以自己動手寫了乙個 刻度可以邊顏色 刻度盤也不止半圈。如圖在輸入框裡面輸入整數,支援0 20480kb s 也就...

自定義 View 迴圈滾動刻度控制項

先看效果圖 enter description here loopscaleview 是乙個自定義的刻度尺風格的選值控制項,從上面的 大家可以看到 loopscaleview 的執行效果.可以設定螢幕內顯示的刻度數,也可以設定每乙個刻度代表的值得大小。onvaluechangelistener 刻度...

自定義刻度 Android自定義滑動刻度進度條

做到以上的效果圖,就可以知道,兩個模式,首先,定義相應的自定義屬性,額,沒辦法,上頭要求,所以規範點 新建乙個bar attrs.xml檔案 attr declare styleable resources 然後就是 中取得相應的屬性值和設定預設值 然後修改seekbar的線的顏色和滑動塊的屬性,通...