在開發 Battery Widget 時,需要在不同電量狀態下顯示對應的圖檔,比如電量 100% 時顯示電池全滿的圖,電量 50% 的時候則顯示半滿的圖。那時很單純的用一堆 if else 來判斷,然後在裡面分別 setImageResource()。當然這樣也不是不行,但看到程式碼裡一堆判斷式,就覺得有點討厭。最近發現原來 Android 早就有替類似的需求設計了 LevelListDrawable,而且是 Since: API Level 1。(我真是太不用功了@@)
用法很簡單,範例如下:
1.首先當然得先準備好不同 Level 的圖檔。
2.在 res/drawable 裡新增一個 battery_level.xml 內容如下:
3.在 Layout 中把這個上面這個 xml 指定給需要變換圖案的 ImageView:
4.當電量變動時呼叫 ImageView 的 setImageLevel() 方法並帶入數值即可;
參考連結:
http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
用法很簡單,範例如下:
1.首先當然得先準備好不同 Level 的圖檔。
2.在 res/drawable 裡新增一個 battery_level.xml 內容如下:
<level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="20" android:drawable="@drawable/battery_20" /> <item android:maxLevel="40" android:drawable="@drawable/battery_40" /> <item android:maxLevel="60" android:drawable="@drawable/battery_60" /> <item android:maxLevel="80" android:drawable="@drawable/battery_80" /> <item android:maxLevel="100" android:drawable="@drawable/battery_100" /> </level-list>可以看出是用 <level-list> 標籤來包 <item>,而每個 <item> 中分別指定數值範圍及圖檔。
3.在 Layout 中把這個上面這個 xml 指定給需要變換圖案的 ImageView:
<ImageView android:id="@+id/imageview_battery" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ battery_level" > </ImageView>
4.當電量變動時呼叫 ImageView 的 setImageLevel() 方法並帶入數值即可;
imageView.setImageLevel(50);若是在 Widget 內則可用 RemoteViews 的 setInt() 方法來設定:
remoteViews.setInt(R.id.imageview_battery, "setImageLevel", 50);
參考連結:
http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
留言
張貼留言