【问题标题】:How to fill the drawable region in an imageView with another drawable?如何用另一个可绘制对象填充 imageView 中的可绘制区域?
【发布时间】:2013-11-29 17:03:14
【问题描述】:

所以我试图在 ImageView 中找到当前图像的区域,并用不同的图像填充该区域。这是原始图像Empty Circle inside an imageView。 imageView 里面有一个可绘制的圆圈。然后,当用户选择图像时,我试图将其变成类似Circle filled with image inside an ImageView 的东西。我不想手动 Photoshop 圆形图像。我只是希望用另一个图像填充该区域。我已经从AlphaComposite 尝试了SRC_IN 方法,但是对于android,我无法从BitMap 转换为graphics2D。如果有人知道如何在 android 中使用 BitmapFactory 解决此问题,我将非常感谢您的帮助。谢谢。

【问题讨论】:

  • 嗨 ramaral,感谢您的链接,但在链接中,它使用Canvas 绘制一个圆形区域,然后使用canvas.drawBitmap(sbmp, rect, rect, paint); 绘制带有位图的ImageView。虽然此方法适用于易于定义的形状。我正在寻找的东西可以灵活地适应不同的形状(不太容易绘制)。我上面的圆形图像只是一个例子。我正在寻找“用新的可绘制图像填充现有的可绘制图像”的方法。而不是重塑“ImageView”。我很感谢你的帮助。谢谢。

标签: android android-imageview android-drawable android-bitmap


【解决方案1】:

除了位图之外的其他解决方案对于您想要实现的任何目标都可能过于简单,否则我认为您会想到它。我只是指出这一点,以防你有“代码盲点”并试图过度设计解决方案,因为你已经工作了太长时间(我们都已经这样做了)

将圆形/形状图像保存为 png,其中要填充的区域是透明的,然后将其设置为 ImageView(等)的可绘制对象,然后在 RelativeLayout 中将此视图放置在要填充的图像上填充该区域并为形状视图应用透明背景,或者只需将填充图像设置为形状视图的背景。

【讨论】:

  • 是的,但如果我让形状透明,我需要getTransparentRegion()。根据文档,此方法调用是从 API 1 开始添加的。默认返回 null。如果我想将此方法用于Drawable 类,我需要重写它并自己提供一个方法来返回透明的位图区域。我已经解决了一些类似的问题,但找不到可以很好地执行此操作的东西(其他方法可能只发现透明区域的一部分)。谢谢。