Android 自定義 SeekBar
阿新 • • 發佈:2019-01-26
轉載請註明出處:http://blog.csdn.net/htwhtw123/article/details/78005899
自定義顏色大小形狀的SeekBar和使用圖片的SeekBar。其中,自定義顏色大小形狀的SeekBar,自定義滑塊顏色形狀,滑軌滑過過後的顏色,滑過之前的顏色;使用圖片的SeekBar之前三項都是直接使用圖片。Demo放在github上:點選跳轉
1.自定義顏色大小形狀的SeekBar
新建在drawable下,新建seek_bar_progress1.xml檔案,定義滑動軌跡:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--設定滑軌顏色:滑過部分和未滑過部分-->
<!--未滑過部分滑軌顏色-->
<item
android:id="@android:id/background"
android:height="15dp"
android:gravity="center">
<shape>
<solid android:color ="#999"/>
</shape>
</item>
<!--滑過部分滑軌顏色-->
<item
android:id="@android:id/progress"
android:height="15dp"
android:gravity="center">
<clip>
<shape>
<solid android:color="#600f"/>
</shape >
</clip>
</item>
</layer-list>
在drawable資料夾下,新建seek_bar_thumb.xml,定義滑塊顏色,這裡沒有去定義形狀,而預設為方形
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!--設定滑塊大小和顏色-->
<size
android:width="20dp"
android:height="30dp"/>
<solid android:color="#60f0" />
</shape>
在佈局檔案在中加入SeekBar控制元件,並在其中新增以下程式碼,progressDrawable和thumb屬性可以在java程式碼中設定,在寫在後面MainActivity註釋中。progressDrawable定義滑軌,thumb定義滑塊,用到剛剛建立的兩個檔案。
<SeekBar
android:id="@+id/seekBar1"
android:progressDrawable="@drawable/seek_bar_progress1"
android:thumb="@drawable/seek_bar_thumb"
......
/>
在MainActivity的onCreate方法,中新增如下程式碼:
SeekBar seekBar1= (SeekBar) findViewById(R.id.seekBar1);
TextView textView= (TextView) findViewById(R.id.textView);
seekBar1.setMax(99);//設定最大進度(預設100),這裡的進度為0~10,可以在佈局檔案中設定
seekBar1.setProgress(22);//設定開始時的進度,預設為0,可以在佈局檔案中設定
textView.setText(seekBar1.getProgress()+"");//獲取進度
// seekBar1.setThumb(getDrawable(R.drawable.seek_bar_thumb));//設定滑塊,可在佈局檔案中設定
// seekBar1.setProgressDrawable(getDrawable(R.drawable.seek_bar_progess));//設定滑軌,可在佈局檔案中設定
seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
//當滑塊位置改變i的值時呼叫
textView.setText(i+"");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//點選滑塊,並且開始滑動時呼叫
Toast.makeText(MainActivity.this, "start slide", Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//鬆開滑塊時呼叫
Toast.makeText(MainActivity.this, "stop slide", Toast.LENGTH_SHORT).show();
}
});
效果如下:
2.使用圖片定義SeekBar
跟上面講的自定義顏色大小形狀的SeekBar差別不大,主要是要修改seek_bar_progress 和SeekBar的thumb屬性。圖片材料:
1.在佈局檔案中改SeekBar的屬性為目標圖片,即可將seekBar的滑塊設定成目標圖片,seek_bar_progress 依舊定義滑軌,之後講怎麼改。
<SeekBar
android:progressDrawable="@drawable/seek_bar_progress2"
android:thumb="@drawable/seek_bar_thumb2"
....../>
2.在drawable檔案加下,新建seek_bar_progress2.xml檔案,程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--設定滑軌圖片:滑過部分和未滑過部分-->
<!--未滑過部分滑軌圖片-->
<item
android:id="@android:id/background">
<bitmap
android:gravity="center"
android:src="@drawable/seek_bar_progress_img_1"/>
</item>
<!--滑過部分滑軌圖片-->
<item
android:id="@android:id/progress">
<clip>
<bitmap
android:width="500dp"
android:src="@drawable/seek_bar_progress_img_2">
</bitmap>
</clip>
</item>
</layer-list>
效果: