如何与图片一起使用形状可绘制对象?

36

我有一个难题,想要在我的LinearLayout中同时实现圆角和背景图片。

我知道可以通过使用形状绘制XML来实现圆角,但如果我将这个形状绘制作为LinearLayout的背景,并使用android:background=@drawable/rounded_corner,那么我就无法将任何图像分配为背景。

如何在我的LinearLayout中同时获得带有背景图像的圆角呢? 任何帮助将不胜感激。谢谢!

2个回答

35
你可以使用LayerDrawable,其中可以包含你需要的任意数量的层(形状或图像)。你可以将其创建为资源或以编程方式创建。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/rounded_corners" android:id="@+id/rounded_corners"/>
    <item android:drawable="@drawable/additional_image" android:id="@+id/additional_image" />
</layer-list>

2
谢谢你的回答,woodshy :)我尝试了一下,但它并不像我预期的那样工作。它们只是被放在彼此上面,而背景图像的角部分仍然可见于圆角形状的后面。有什么办法可以让它在保持圆角形状的同时使用背景图像呢? - Surya Wijaya Madjid
那么,为什么你不能创建一个带有圆角的图像呢? - woodshy
4
如果可以的话,那将是最简单的方法,但我希望避免这样做。事实上,这张图片是由别人制作的,如果可能的话,我希望在不要求他改变图片本身的情况下完成它。 - Surya Wijaya Madjid
这对我很有用,因为我想要一个圆形内的图像,圆形是一个XML形状,所有角落都是30dp,而图像只是一个可绘制对象。 - speedynomads
我发现当第二层(一张图片)被添加时,第一层(一个形状)会被放大。这张图片比形状小。这是正常的吗?我该如何避免这种情况? - Roar Skullestad

3

如果您正在寻找不同的答案

在XML中

<string-array name="ulke_isimleri">
    <item>kan</item>
    <item>kebapeli</item>
</string-array>

<array name="ulke_gorselleri">
    <item>@drawable/kan1</item>
    <item>@drawable/esyalar_kebap_adana</item>
</array>

在onCreate或通用中。
 String[] ulkeAdlari =getResources().getStringArray(R.array.ulke_isimleri);
 TypedArray ulkeGorselleri = getResources().obtainTypedArray(R.array.ulke_gorselleri);

作为一个函数
 @Override
    public Drawable getDrawable(int position) {

         Drawable[] drawable = new Drawable[] { 
                 ulkeGorseli.getDrawable(position   ) 
                 ,
                 new TextDrawable(ulkeAdlari[ position   ]  )
         };
        return new LayerDrawable(drawable);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接