seekbar的尺寸定義精要


seekbar背景的定制是一件麻煩的事情,而且最好是用shapedrawable去定制(這樣可以任意拉伸),如果直接用圖片,則注意的事項就會很多了,否則一般情況下總會有各種不如意。最近做UI遇到了seekbar必須用到圖片去填充的情況,定義尺寸的時候費了很多勁。效果如下圖:

明顯是一個背景圖和thumb,沒有progress,而且配上屏幕適配 的問題,費了很大勁。

順便提及,其實很多情況下,例如button、seekbar、imagebutton、imageview等等wrap_content設置background的時候,圖像出現意外拉伸或縮小,其實是由於圖像在drawable的目錄不對引起的(而不是設置minheight和minwidth的問題,設置這個確實能解決問題,但是圖像可能會因為拉伸變得模糊,因為並不是這個引起的,根本原因要清楚),筆者此項目是在屏幕密度為160dpi的車機上運行的,對應的drawable應放置在mdpi的文件夾下,一開始時候我是放在hdpi(240dpi)文件夾下的,背景顯示在車機上,總會縮小1/3,因為android加載圖片時候,已經根據目錄幫你算好了在屏幕上應該顯示多少dp,例如在hpi文件夾下的100px的圖片,android會認為你是在240dpi的屏幕上運行,要顯示出100px,應該是66.7dp的長度,這時你如果在160dpi的設備商運行,顯示效果還是66.7dp的效果,即66.7px

我最終的布局參數是:

<SeekBar 
                android:id="@+id/splash"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minHeight="145dp"
                android:maxHeight="145dp"
                android:maxWidth="482dp"
                android:minWidth="482dp"
                android:progressDrawable="@drawable/radio_dash"
                android:thumb="@drawable/radio_dash_drag"
                android:progress="20"
                android:max="100"
                android:paddingLeft="1dp"
                android:paddingRight="1dp"
                android:thumbOffset="1dp"
                />

其中,minwidth和minheight等四個屬性只對progressDrawable里邊的內容有效,我們可以用這四個屬性固定住背景和進度條,layout_width和height如果也設置為固定值,則如果滑塊比背景大,多余的部分就不會顯示。而thumboffset是滑塊相對於背景的起始部分,設置為0則滑塊的左邊緣會與背景的左邊緣對齊,設置為正值則會expand背景,這時需要設置padding讓expand出背景的滑塊顯示出來,達到滑塊的中心跟背景的起點對齊的效果。

      綜上所述,就是利用minwidth和minheight來固定progressDrawable,用thumboffset和padding來設置滑塊,效果美美噠喵

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM