使用Layer List实现多图层叠加

我的需求很简单:使用重叠的小图来代替一张大图作为背景,因为大图很占内存,这个在移动开发中是不能容忍的(当然前提是该图可以通过小片的图重叠得到)。但是还有额外的要求就是原先的大图是有stroke的,就是边框,我用重叠的图片必须没有边框(可以选择高度保持,宽度截取一部分,这样左右两边就没有边框)。

 

解决方案也很简单,比较容易想到,就是使用Layer List:定义一个item为shape,用来添加stroke做为重叠后的图片的边框,再定义一个item为bitmap,设置tileMode为repeat,并且为了保证图片不被拉伸变形之类的,设置gravity为center,另外设定一些left,right的偏移,以便能显示出来shape的stroke。

 

之所以需要在此记录一下,就是我碰到一个超级恶心的问题,就是在3.0以下的系统,重叠的图片之间会有很明显的线。。。这个纠结我好久了。。害我差点放弃这个解决方案,而用一个么有边框的难看的背景。。还好我隔了一段时间又开始看这个问题(好长好多废话。。)。分析之后发现好像是定义的shape默认会是黑色,可能我之前的图片是有一定透明度的,所以会显示出来,但是至于为什么只在图片之间能明显的看出来我就不清楚了。。所以,将shape的颜色设定为透明的就可以了。。

 

下面是定义的xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns: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>

 
转载自:https://blog.csdn.net/crybaby1987/article/details/84157001

You may also like...