1. 程式人生 > >自定義漂亮的Android SeekBar樣式

自定義漂亮的Android SeekBar樣式

系統自帶的SeekBar真是太難看了,不能容忍! 只能自己做了,先來張效果圖

第1個Seekbar 背景是顏色,thumb是圖片,上程式碼:

<SeekBar
        android:id="@+id/timeline"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:maxHeight="4.0dip"
        android:minHeight="4.0dip"
        android:paddingLeft="16.0dip"
        android:paddingRight="16.0dip"
        android:progressDrawable="@drawable/po_seekbar"
        android:thumb="@drawable/seekbar_thumb" />
drawable/po_seekbar.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">
        <shape>
            <solid android:color="#ff51495e" />
        </shape>
    </item>
    <item android:id="@*android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="#ff51495e" />
            </shape>
        </clip>
    </item>
    <item android:id="@*android:id/progress">
        <clip>
            <shape>
                <solid android:color="#ff996dfe" />
            </shape>
        </clip>
    </item>
</layer-list>
drawable/seekbar_thumb.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/seekbar_thumb_normal" />
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/seekbar_thumb_pressed" />
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/seekbar_thumb_pressed" />
    <item android:drawable="@drawable/seekbar_thumb_normal" />
</selector>

seekbar_thumb_pressed.png:

seekbar_thumb_normal.png:


第2個和第3個seekbar都是圖片實現的

    <SeekBar
        android:id="@+id/sb_detail_play_progress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:paddingLeft="15.0dip"
        android:paddingRight="15.0dip"
        android:progressDrawable="@drawable/progress_holo_light"
        android:thumb="@drawable/detail_icon_schedule_ball" />

drawable/progress_holo_light.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:drawable="@drawable/volumn_bg" />
    <item android:id="@*android:id/secondaryProgress">
        <scale android:drawable="@drawable/volumn_front" android:scaleWidth="100%" />
    </item>
    <item android:id="@*android:id/progress">
        <scale android:drawable="@drawable/volumn_primary" android:scaleWidth="100%" />
    </item>
</layer-list>
volumn_bg.9.png


volumn_front.9.png


volumn_primary.png


第3個seekbar



這有個圖片

如何製作Seekbar圖片

之前在做Seekbar的時候,反覆讓美工做了很多圖都不合適要麼不好看,後來也不好意思讓美工繼續做了,於是自己動手做

後面兩個用圖片實現的Seekbar是從優酷客戶端扣出來的,開啟volumn_bg.9.png、volumn_front.9.png、volumn_primary.9.png ,放大到可以看很清楚,發現圖片四周都是黑點,這就是傳說中的 .9圖片(不瞭解的可以先弄明白再繼續),再看看大小3*25  90位元組。


開始動手!

第一步當然要先開啟PhotoShop啦

然後新建,如圖:


這裡的大小1*23 與 volumn_bg.9.png的大小3*25 明顯不符,不過這正是使用到.9圖片的目的

新建完成後,按Ctrl 加+鍵持續放大


在紅色箭頭所指方向選擇矩形選框工具,然後畫出一個畫素的點


按方向鍵 ↑↓ 調整位置到居中

然後在選框中右鍵-填充-內容-使用-顏色,可以隨意找喜歡的顏色,volumn_primary.9.png放大後看到居中的點是藍色的,那我就來個紅色的


檔案-儲存為Web所用格式 儲存名為volumn_primary.png,儲存後大小為932位元組,使用.9處理過後,它就會縮小10倍了

開啟draw9patch.bat 使用draw9patch,直接將剛才儲存的圖片拖入程式中


在SDK路徑下tools資料夾下面可以找到draw9patch,在這裡提示下,某些SDK下的draw9patch不能使用,比如我的SDK:adt-bundle-windows-x86_64-20140321,SDK比較新,後來我就找了個比較老的,就可以用了下載連線:http://download.csdn.net/detail/w8320273/7813455

照著volumn_primary.9.png給它畫黑點


在Draw9 patch中 Ctrl+S 儲存,還是老名字volumn_primary.png,下圖可以看到已經自動命名成volumn_primary.9.png,大小也變成了3*25 91位元組,就是不知道在程式中效果顯示會怎麼樣,那就把它複製到專案中替換掉原來的,看看情況如何



接下來再繼續做thumb也就是滑塊

首先看detail_icon_schedule_ball.png 大小40*40 2.48KB,圖片還帶有陰影效果

開啟PhotoShop新建40*40,在矩形選框工具右鍵選擇圓形選框工具,按住Shift鍵同時按滑鼠左鍵畫出規則圓形,畫的時候最好放大介面

然後填充想要的顏色,在PhotoShop最右邊可以找到不透明度,改為50%

Shift+Ctrl+N新建圖層然後在中間再畫一個圓,填充,再儲存然後就OK了

我畫好的樣子:


效果:


沒有陰影效果也還可以吧,需要效果的可以網上找PhotoShop實現陰影的效果,畢竟我也不是專業的