Android自定義RatingBar(評分控制項)

2021-07-22 16:17:44 字數 2139 閱讀 3717

ratingbar簡單介紹

ratingbar是基於

seekbar

(拖動條)和

progressbar

(狀態條)的擴充套件,用星形來顯示等級評定,

在使用預設ratingbar時,使用者可以通過觸控/拖動/按鍵(比如遙控器)來設定評分, 

ratingbar自帶有兩種模式

,乙個小風格

ratingbarstylesmall

,大風格為

ratingbarstyleindicator

,大的只適合做指示,不適用與使用者互動。

黃色星形為 

自定義ratingbar

小綠色為自帶的 

ratingbarstylesmall

大綠色為自

帶的ratingbarstyleindicator

通過設定 style="************x"進行設定切換(比如:style="?android:attr/ratingbarstyleindicator")

自定義ratingbar需要注意的地方

一般情況下,系統自帶的ratingbar是遠遠無法滿足開發需求的,我們根據自定乙個ratingbar,在開始實現自定義ratingbar之前,順帶說一下res目錄下放置目錄的區別:

在android sdk 1.5版本之前res目錄下面只有乙個drawable乙個目錄,在android sdk 1.6版本以後就出現了三個目錄,分別是drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi,

(1)drawable-hdpi裡面存放高解析度的,如wvga (480x800),fwvga (480x854) 

(2)drawable-mdpi裡面存放中等解析度的,如hvga (320x480)

(3)drawable-ldpi裡面存放低解析度的,如qvga (240x320)

(4)drawable-xhdpi裡面存放超大解析度的,至少960dp x 720dp 

由於我們自定義實現的ratingbar裡面使用到的星形解析度比較低,所以一般情況下,我們把放到drawable-mdpi或者drawable-ldpi裡面。

自定義ratingbar的實現過程 首先

,根據自定乙個ratingbar的背景條,和放到同乙個目錄下面(比如drawable-mdpi),room_rating_bar.xml

<?xml version="1.0" encoding="utf-8"?>

backgroud:是用來填充背景的,和進度條非常類似,當我們設定最高評分時(android:numstars),系統就會根據我們的設定,來畫出以星星為單位的背景(假如android:numstars="5",就會畫出5顆灰色的星星)

progress:

是用來在背景基礎上進行填充的指示屬性(和進度條類似,第一進度位置)

secondaryprogress:

同progress一樣屬於第二進度位置(如果不定義這個,進度條拖動,每次就畫出一整顆星星(亮),第二進度(暗)沒有覆蓋掉第一進度之後的位置,從左往右是拖不出來n.5顆星星的,這樣評分效果就不完整)

其次,通過開始介紹,我們知道ratingbar的樣式是通過style來切換的,在android中,我們可以通過在styles.xml檔案中通過設定style屬性,來繼承我們需要自定控制項型別,如下styles.xml

<?xml version="1.0" encoding="utf-8"?>

通過 parent

屬性來選擇繼承的父類,我們這裡繼承ratingbar類。 

重新定義 

progressdrawable

屬性(ratingbar的背景條,和我們在首先裡面介紹的那樣) 

maxheight和minheight可以根據我們畫素或者其他參考值來設定。 

最後,在我們需要用到ratingbar的xml配置檔案裡面新增ratingbar控制項。 

main.xml 

附上原始碼: 

自定義ratingbar實現

Android自定義控制項 自定義屬性

自定義屬性的過程 1.在res values資料夾中建立attrs的xml檔案。2.寫入標籤,定義子標籤attr,放入自定義屬性的名稱。format 可以用 來同時使用 1 reference 參考某一資源id 2 color 顏色值 3 boolean 布林值 4 dimension 尺寸值 帶有...

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

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

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