天天看點

Android 自定義SeekBar樣式

android系統自帶的seekbar的樣式比較單一,而且不同品牌手機被定制了之後樣式也不一樣,為了seekbar的樣式和應用的風格統一,就需要自定義seekbar的樣式,先看效果圖:

Android 自定義SeekBar樣式

<seekbar

android:layout_width=”192dip”

android:layout_height=”wrap_content”

android:progressdrawable=”@drawable/seekbar_style”

android:thumb=”@drawable/thumb_bg”

android:id=”@+id/seekweight”

android:max=”70″

android:paddingleft=”17dip”

android:paddingright=”17dip”

/>

1.改變按鈕的樣式。

這個很簡單,直接則layout檔案裡指定android:thumb屬性即可,如上面紅色字型,需要注意的是seekbar的寬的左右的padding一定要指定。

2.改變長條的顔色。

這裡隻需指定android:progressdrawable屬性即可,下面是seekbar_style檔案,放在drawable檔案夾下。

<?xml version=”1.0″ encoding=”utf-8″?>

<layer-list xmlns:android=”http://schemas.android.com/apk/res/android”>

<item android:id=”@android:id/background”>

<shape>

<corners android:radius=”10dip” />

<gradient

android:startcolor=”#d4d4d4″

android:centercolor=”#ffffff”

android:endcolor=”#ffffff”

android:centery=”0.45″

android:angle=”270″/>

</shape>

</item>

<item android:id=”@android:id/progress”>

<clip>

android:startcolor=”#ffd202″

android:centercolor=”#ffc004″

android:endcolor=”#fbc600″

</clip>

</layer-list>

紅色的<item android:id=”@android:id/background”>指定了seekbar背景的顔色。android:startcolor,android:centercolor,android:endcolor分别指定了開始,中間,結尾的顔色,使seekbar有了立體的效果。綠色的<item android:id=”@android:id/progress”>指定了seekbar滾過的部分的顔色。

3.seekbar上面動态變化的彈出框顯示目前值。

原理是在seekbar上面方一個textview,在seekbar的監聽onseekbarchangelistener裡動态改變textview的layoutparams的leftmargin屬性。

layout:

<linearlayout

android:layout_width=”wrap_content”

android:orientation=”vertical”

>

<textview

android:background=”@drawable/bg_seektv”

android:textcolor=”#000000″

android:textstyle=”bold”

android:id=”@+id/tvweight”

android:gravity=”center”

android:layout_marginleft=”7dip”

</linearlayout>

代碼:

seekstrength.setonseekbarchangelistener(mseekchange);

private onseekbarchangelistener mseekchange = new onseekbarchangelistener() {

@override

public void onstoptrackingtouch(seekbar seekbar) {

// todo auto-generated method stub

}

public void onstarttrackingtouch(seekbar seekbar) {

public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) {

int istrength = seekbar.getprogress() + 1;

linearlayout.layoutparams paramsstrength = new linearlayout.layoutparams(linearlayout.layoutparams.wrap_content,linearlayout.layoutparams.wrap_content);

paramsstrength.leftmargin = (int) ((istrength-1)*5*fdensity+7*fdensity);

tvstrength.setlayoutparams(paramsstrength);

具體數值需要根據情況調整,大緻思路就是這樣。

繼續閱讀