先上效果圖
一、view的測量(刻度盤的大小測量)
在現實生活中,我們如果要去畫乙個圖形,那麼便要知道它的大小和位置。所以android繪圖時需要我們對view進行測量。android為我們提供了onmeasure()方法來幫助我們去測量乙個view,我們只需要重寫onmeasur()方法,將我們測算長寬設定給setmeasureddimension()。
@override我們首先測量我們最開始弧形的大小。即圖中的樣例。protected
void onmeasure(int widthmeasurespec, int
heightmeasurespec)
二、view的繪製(簡單繪製出我們需要的弧形)
測算完成後我們需要將他在畫面上顯示出來,android為我們提供了ondraw()方法,來繪製view。
@override不了解canvas的可以去看看canvas的繪製apiprotected
void
ondraw(canvas canvas)
現在在布局檔案中設定後,就可以看見我們最開始的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, intdefstyleattr)
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的線的顏色和滑動塊的屬性,通...