如何将形状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 - 使用 xml drawable 制作检查图标