2012-04-07 21 views
8

尝试使用LayerDrawable(在XML中定义为层列表)将多个形状drawables层叠到另一个上;用作布局的背景。在不使用位图的情况下防止LayeredList中的形状缩放

Android的指南(for LayerList)说:

所有的绘制项目缩放默认情况下,以适应包含视图, 的大小。因此,将图像放置在位置不同的 位置的图层列表中可能会增加视图的大小,并且一些图像的缩放比例适合 。为避免缩放列表中的项目,请在<item>元素内使用<bitmap> 元素来指定drawable,并将重力定义为不缩放的东西,如“center”。

我不希望我的形状规模,但我不能确定如何包装他们在正确bitmap标签:它会产生一个错误,如果我这样做如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_one" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_two" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_three" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_four" 
      android:gravity="center" /> 
    </item> 
</layer-list> 

怨:

二进制XML文件行#25:<bitmap>需要一个有效的src属性

其中一个可绘图的例子,例如RES /绘制/ layer_one.xml:

<?xml version="1.0" encoding="utf-8"?> 

<!-- res/drawable/layer_one.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="#FFFFFF"/> 
    <corners 
     android:bottomRightRadius="15dp" 
     android:bottomLeftRadius="15dp" 
     android:topLeftRadius="15dp" 
     android:topRightRadius="15dp" /> 
</shape> 

在Android上使用的示例使用图像作为可绘制,而不是XML定义形状(不是说我的错误是特定于这些,而我没有在某个地方犯了一个愚蠢的错误)。任何线索表示感谢,谢谢。


Using drawable resources
,你不能使用XML作为绘制的SRC的处理这问题的答案的状态。我修改了问题的标题,现在问你如何防止形状缩放(从而调整容器视图的大小)而不使用bitmap,或者我是否被迫使用实际的图像资源?


添加所期望的结果的图像, - 具有与在此之上的规则矩形形状填充或什么,然后分层背景的能力,多个形状可绘(这里有3个椭圆)。左边是理想的,在顶部和左侧偏移是允许的,而右边是好的,在那里所有的形状只是去默认位置:

enter image description here

回答

2

是,(按我以前answer你不能使用XML绘制位图。构建起来很好,但是当你运行应用程序时,它会崩溃。

关于该语句use a <bitmap> element inside the <item> element意味着你可以在你的图层列表中定义更多的形状,这就是它的用途。虽然你也可以定义位图,但是你的位图应该有一个指向实体图像(而不是xml)的值。

你可以做的是将layer_one,layer_two和其他图层的xml插入到layer_list xml中。例如:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item> 
     <shape 
      android:shape="rectangle" > 
      <solid android:color="#FFFFFF" /> 

      <corners 
       android:bottomLeftRadius="15dp" 
       android:bottomRightRadius="15dp" 
       android:topLeftRadius="15dp" 
       android:topRightRadius="15dp" /> 
     </shape> 
    </item> 

    <!-- and so on with your other shapes --> 

</layer-list> 

希望它应该工作:)

+0

对不起Waqas,从Android开发人员网站引用时,忘记了反引号,应该读,现在固定“在元素使用元素”。你描述的方法是我开始,但形状规模填补父视图这就是我想要避免:( – ataulm 2012-04-07 18:32:08

+0

是的,该声明仍然有效使用位图与有效的src属性(不是指xml drawable)在层次列表中可绘制,即使在android的开发人员站点中,他们也会使用实体图像作为示例,您想要制作什么样的图像?您可以将其张贴为图像吗?也许我可以建议您使用其他解决方案 – waqaslam 2012-04-07 18:44:41

+2

当将位图重力设置为“中心”时将无法缩放,因此无效。我希望定义一系列相互重叠的椭圆(大小递减)作为背景(实验,而不是最终的设计:P)将在10分钟内张贴图像 – ataulm 2012-04-07 18:47:43

相关问题