Android:Layer-List无效?

时间:2012-06-11 00:34:32

标签: android android-layout android-xml

我试图把两个椭圆形的抽屉放在一起,第一个有透明度。然而,按照我的方式,它显示第一个椭圆形的第二个椭圆形的颜色。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape android:shape="oval">
        <size android:width="15dp" android:height="15dp" />
        <solid android:color="#35000000"/>
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <size android:width="5dp" android:height="5dp" />
        <solid android:color="#000000"/>
    </shape>
</item>
</layer-list>

如何让它按预期工作?

修改 这是父母:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_layerlist" />
</LinearLayout>

1 个答案:

答案 0 :(得分:8)

在对不同类型的XML drawable进行大量研究之后,您的LayerDrawable(图层列表)似乎正在独立地缩放ShapeDrawables 然后 ImageView正在缩放LayerDrawable。根据{{​​3}}, ShapeDrawableLayerDrawable的扩展是一个问题。 LayerDrawable将检查您拥有的每个项目的必要缩放比例。他们有几个解决方案:

  • gravity设置为无法缩放的内容,例如“center”。
  • 将drawable定义为位图。
  • 将ImageView设置为不缩放的scaleType。

这有两个主要问题,但是......您只能gravity使用bitmap。并且您不能将ShapeDrawable用于XML中的bitmap。我尝试了 一切 我能想到要做到这一点。这是唯一为我修复它的事情。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/oval1"
    android:scaleType="center"  />
<ImageView
    android:id="@+id/imageView2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/oval2"
    android:scaleType="center"  />
</FrameLayout>

所以:我删除了LayerDrawable,将Shapes分成了自己的XML,制作了两个ImageView。 (为了方便我将它们卡在FrameLayout中)。这是阻止缩放的唯一方法。


测试程序

在Android 2.1,3.0,4.0中测试

  • 更改了图片scaleType
  • 更改了图片widthheight
  • 分隔的ShapeDrawables
  • 将LayerList更改为仅item s,drawable属性引用了分隔shape s
  • 将LayerList更改为bitmap引用分隔的shape s。
  • 更改了shape s
  • 的顺序

或者,您可以在代码中执行此操作。