如何将形状drawable和drawable组合成单个drawable

Posted

技术标签:

【中文标题】如何将形状drawable和drawable组合成单个drawable【英文标题】:How to combine shape drawable and drawable into single drawable 【发布时间】:2015-11-07 11:17:44 【问题描述】:

我正在以编程方式在 android 中生成形状可绘制和可绘制运行时。我所需要的是将两个drawable组合成一个drawable。我尝试通过以下方法实现,但似乎没有任何效果。

使用 LayerDrawable 将两个可绘制对象组合成单个的示例代码

public static LayerDrawable drawCircleWithIcon (Context context, int width, int height, int color,Drawable drawable) 

        ShapeDrawable oval = new ShapeDrawable (new OvalShape ());
        oval.setIntrinsicHeight (height);
        oval.setIntrinsicWidth (width);
        oval.getPaint ().setColor (color);

        Drawable[] layers = new Drawable[2];
        layers[0] = drawable;
        layers[1] = oval;

        LayerDrawable composite1 = new LayerDrawable (layers);

        return composite1;
    

我正在传递的论点:

width - width of the circle  
height - height of the circle  
color - color of the circle
drawable - icon that needs to be fit inside the ShapeDrawable (i.e. Round circle inside placed with icon) 

我的要求:

我需要组合两个drawable(一个是ShapeDrawable 和drawable)。输出必须如下所示

请帮助我解决将两个可绘制图标合并为一个可绘制图标的替代方法。提前致谢。

【问题讨论】:

你为什么不使用 RoundedBitmapDrawable ? 感谢您的解决方案。怎么用??? developer.android.com/intl/ru/reference/android/support/v4/… 【参考方案1】:

您可以尝试使用 imageview 并设置属性 backgroundDrawable 和 imageDrawable 或 imageResource。

yourImageView.setBackgroundDrawable(yourShape);
YourImageView.setImageDrawable(yourImage);

要调整可绘制对象并保持纵横比,请尝试使用他的方法。

yourImageView.setAdjustViewBounds(true);
yourImageView.setScaleType(ScaleType.FIT_CENTER);

由于这个答案不适合这个问题,如果你想要创建一个组合多个可绘制对象的单个图像,你可以尝试这样的事情:

Resources res = getResources();

// Front image
Bitmap image = BitmapFactory.decodeResource(res, R.drawable.frontImage);

// The rounded background
Bitmap background = BitmapFactory.decodeResource(res, shapeDrawable);
RoundedBitmapDrawable dr = RoundedBitmapDrawableFactory.create(res, background);
dr.setCornerRadius(Math.max(background.getWidth(), background.getHeight()) / 2.0f);

Bitmap combined = Bitmap.createBitmap(dr.getWidth(), dr.getHeight(), Bitmap.Config.ARGB_8888);

// Creates the combined drawable
Canvas canvas = new Canvas(combined);
canvas.drawBitmap(dr,0, 0, null);
canvas.drawBitmap(image, dr.getWidht() / 2.0f, dr.getHeight() / 2.0f, null);

我没有尝试过上面的代码,但我正在展示一些可以帮助你的东西。

【讨论】:

不,我需要将其生成为单个可绘制对象,因为我需要为 NavigationView 图标设置可绘制对象 @Chandru 我已经编辑了答案,你可以检查它是否有帮助。谢谢

以上是关于如何将形状drawable和drawable组合成单个drawable的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中使用xml drawable创建半圆形填充形状?

Android 按钮使用相同的 Drawable 形状但使用不同的颜色

android形状drawable

Android - 使用 xml drawable 制作检查图标

Android Drawable:在 XML 文件中以百分比指定形状宽度?

Android Drawable - Shape Drawable使用详解(附图)