如何将可绘制的形状与图像一起使用?

Posted

技术标签:

【中文标题】如何将可绘制的形状与图像一起使用?【英文标题】:How to use a shape drawable together with an image? 【发布时间】:2011-09-09 23:15:30 【问题描述】:

我很难在LinearLayout 中同时拥有圆角和背景图像。

我知道我可以通过使用 shape drawable XML 来实现圆角,但如果我将 shape drawable 作为LinearLayout 的背景android:background=@drawable/rounded_corner,那么我无法指定任何图像用作背景。

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

【问题讨论】:

【参考方案1】:

您可以使用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>

【讨论】:

感谢woodshy 的回答 :) 我试过了,但它不像我预期的那样工作。它们只是被放在彼此的顶部,背景图像的角部分在圆角形状后面仍然可见。知道如何在保持圆角形状的同时使用背景图像吗? 那么为什么不能创建圆角的图像呢? 那将是最简单的方法,但如果可以的话,我想避免这种情况。事实是,图像是由其他人制作的,如果可能的话,我想在不要求他更改图像本身的情况下这样做。 这对我有用,因为我想要一个圆圈内的图像,圆圈是一个 xml 形状,所有角都是 30dp,而图像只是一个可绘制的。 我发现添加第二层(图像)时,第一层(形状)被放大了。图像小于形状。这是正常的吗?我该如何避免呢?【参考方案2】:

对于那些寻求不同答案的人

在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);
    

【讨论】:

以上是关于如何将可绘制的形状与图像一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将可绘制资源中的图像保存到 SD 卡?

java 将可绘制图像转换为BitmapDrawable

如何在背景图像上绘制(如在 GLPaint 中)并使用临时绘图?

如何使用xml中的可绘制形状绘制半椭圆形(Android)

可拖动图像上的画布绘图

将可绘制图像正确共享到其他应用程序(在没有 FileProvider 的情况下将 PNG 共享到 Whatsapp 失败)