Android SeekBar 和 draw9patch 的使用

來源:互聯網
上載者:User

標籤:

今天要使用一個SeekBar控制項,其實我覺得Android預設樣式已經很不錯了,無奈設計不同意,而且SeekBar左右兩邊也有圖片,預設樣式和圖片也確實不協調,因此這裡使用圖片自訂SeekBar樣式,首先上代碼:

<SeekBar    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:max="100"    android:thumbOffset="10dp"    android:paddingLeft="10dp"    android:paddingRight="12dp"    android:thumb="@drawable/device_light_progress_thumb"    android:progressDrawable="@drawable/device_light_progressbar" />
android:thumb下的資源就是拖動條的滑塊圖片,android:thumbOffset的作用是防止thumb滑塊不能完全顯示,避免被遮擋;
android:progressDrawable下是自訂拖動條的樣式,這裡是兩張圖片,代碼如下:
<?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/progressbar_bg" />             <item android:id="@android:id/progress"            android:drawable="@drawable/progressbar_checked">            </item>  </layer-list>

其中@android:id/background是指滑塊未拖動時,拖動條顯示的圖片;

@android:id/progress是指拖動滑塊後,滑塊前面的部分所顯示的圖片;

SeekBar的使用大概就是這樣,以後再遇到這方面的問題我再來補充,下面說說draw9patch。

之所以說draw9patch是因為progressbar_bg和progressbar_checked兩張圖片在配置SeekBar時,出現圖片過長,右側沒有結束的圓弧,而直接是一個切面,因此可以看出圖片的長度沒有收縮,這裡首先想到的就是使用SDK-tools中的draw9patch工具將兩張圖片製作成9圖,主要過程包括兩個階段:

第一:

考慮到SeekBar的捲軸寬度較小,大約只有5-10個像素,因此第一次製作時只是將圖片在橫向上做成可以展開和收縮,縱向未作處理。將圖片匯入drawable-h,經調試發現,圖片在在上方顯示有黑邊,而且圖片右側還是切面,可以知道這張圖片仍然沒有收縮;

經過尋找資料,發現是自己沒有搞清楚draw9patch製作9圖的機制,即上下左右約束的都是什麼:

左邊 是垂直方向可以伸縮的地區
上邊 是水平方向可以伸縮的地區
右邊 是垂直方向的內容地區
下邊 是水平方向的內容地區

(下邊和右邊為圖片內容的padding值)

必須高和寬都加上約束,如果只有高或者只有寬添加約束,仍然會有黑線。

另外,設定黑線時,點不能斷,否則9patch圖片會按照普通圖片進行顯示。

在弄清楚原理之後,將縱向也進行draw9patch處理,經調試,SeekBar右側也顯示了圓弧,即圖片適配正常。

第二:

然後我將progressbar_checked這張圖片也進行了同樣的處理,即拖動滑塊後的圖片也製作成9圖。匯入應用後,SeekBar的顯示反而出錯了,即未拖動滑塊時,整個SeekBar已經顯示為progressbar_checked的圖片樣式,好像已經拖動到底一樣。這個錯誤讓我很不理解,progressbar_checked.png未改為9圖時能夠正常顯示,在改為9圖後反而出錯了,在將progressbar_checked替換為原來的圖片之後,應用又恢複正常。

這裡猜測是9圖自動適配控制項導致的,具體原因還需要繼續研究。

 

 

Android SeekBar 和 draw9patch 的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.