我的需求很簡單:使用重疊的小圖來代替一張大圖作爲背景,因爲大圖很佔內存,這個在移動開發中是不能容忍的(當然前提是該圖可以通過小片的圖重疊得到)。但是還有額外的要求就是原先的大圖是有stroke的,就是邊框,我用重疊的圖片必須沒有邊框(可以選擇高度保持,寬度截取一部分,這樣左右兩邊就沒有邊框)。
解決方案也很簡單,比較容易想到,就是使用Layer List:定義一個item爲shape,用來添加stroke做爲重疊後的圖片的邊框,再定義一個item爲bitmap,設置tileMode爲repeat,並且爲了保證圖片不被拉伸變形之類的,設置gravity爲center,另外設定一些left,right的偏移,以便能顯示出來shape的stroke。
之所以需要在此記錄一下,就是我碰到一個超級噁心的問題,就是在3.0以下的系統,重疊的圖片之間會有很明顯的線。。。這個糾結我好久了。。害我差點放棄這個解決方案,而用一個麼有邊框的難看的背景。。還好我隔了一段時間又開始看這個問題(好長好多廢話。。)。分析之後發現好像是定義的shape默認會是黑色,可能我之前的圖片是有一定透明度的,所以會顯示出來,但是至於爲什麼只在圖片之間能明顯的看出來我就不清楚了。。所以,將shape的顏色設定爲透明的就可以了。。
下面是定義的xml:
<?xmlversion="1.0"encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<!-- define border-->
<stroke
android:width="*dp"
android:color="#********"/>
<!--set color-->
<solid
android:color="#00******"/>
</shape>
</item>
<item
android:left="*dp"
android:right="*dp">
<!--repeat bitmap-->
<bitmap
android:src="@drawable/****"
android:tileMode="repeat"
android:gravity="center"/>
</item>
</layer-list>
http://michellewang.iteye.com/blog/1416754