1. 程式人生 > >Android 自定義 SeekBar

Android 自定義 SeekBar

轉載請註明出處: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>

效果:
這裡寫圖片描述