8

我正在尝试将两个椭圆形可绘制对象放在一起,第一个具有透明度。但是,按照我的方式,它以第二个椭圆的大小显示第一个椭圆的颜色。

<?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>
4

1 回答 1

8

在对不同类型的 XML 可绘制对象进行了大量研究之后,您的(图层列表)似乎LayerDrawable正在独立缩放ShapeDrawables然后ImageView正在缩放LayerDrawable。根据Google 的这份指南, s 和s 的缩放是一个问题。s 将检查您拥有的每个项目的必要缩放。他们有几种解决方案:ShapeDrawableLayerDrawableLayerDrawable

  • 将 设置为gravity不缩放的东西,例如“中心”。
  • 将drawable定义为位图。
  • 将 ImageView 设置为不缩放的 scaleType。

但是,这有两个主要问题……您只能gravity用于bitmap. 并且您不能bitmap在 XML 中使用 ShapeDrawable。我尝试了我能想到的一切来把它做好这是唯一为我解决的问题。

<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 更改为 just items,drawable属性引用分隔shape的 s
  • 将 LayerList 更改为bitmaps 引用分隔shape的 s。
  • 更改了shapes 的顺序

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


于 2012-06-13T11:19:05.643 回答