1

我正在以编程方式在 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)。输出必须如下所示

在此处输入图像描述

请帮助我提供解决方案或替代方法,将两个可绘制对象合并为一个可绘制图标。提前致谢。

4

1 回答 1

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

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

于 2015-08-14T09:09:50.813 回答