我有一组Bitmaps
,我想将它们合并为一个Bitmap
,以便它们都以垂直格式可见。
理想情况下,它看起来像:
|Image1|
|Image2|
|Image3|
| . | <--- a single Bitmap
| . |
| . |
我看到了一个建议使用
Canvas
相互绘制Bitmaps
的问题,但我不知道如何为我的问题设置格式。我的
Bitmaps
是在循环中生成的,如下所示:for (int i = 0; i < bitmapSet.size(); i++) {
Bitmap bitmap = bitmapSet.get(i);
// Merging them together would go here
}
最佳答案
如果要彼此叠加显示多个图像,最简单的解决方案是使用LayerDrawable
。您可以用代码或xml创建LayerDrawable
。
1)在代码中创建一个LayerDrawable
如果要堆叠动态图像,则必须在代码中创建LayerDrawable
。您可以这样做:
final LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{
someDrawable,
anotherDrawable,
aThirdDrawable
});
Drawables
的绘制顺序与数组中出现的顺序相同。创建LayerDrawable
后,您可以像使用其他任何Drawable
一样使用它,其余的将由LayerDrawable
负责。2)在XML中创建
LayerDrawable
如果要彼此堆叠资源文件夹中包含的一些资产,只需在res / drawable文件夹中创建一个具有适当名称的新xml文件。定义
LayerDrawable
的方式如下:<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/someDrawable"/>
<item android:drawable="@drawable/anotherDrawable"/>
<item android:drawable="@drawable/aThirdDrawableJustForGoodMeasure"/>
</layer-list>
对于要堆叠的每个
Drawable
,只需添加另一个<item />
标记并引用Drawable
。同样,<layer-list />
标记中项目的顺序决定了绘制顺序。在您的特定情况下,由于您的
List
似乎是Bitmaps
,因此可以这样创建LayerDrawable
:final List<Bitmap> images = ...;
final Drawable[] layers = new Drawable[images.size()];
for (int i = 0, count = images.size(); i < count; i++) {
layers[i] = new BitmapDrawable(getResources(), images.get(i));
}
final LayerDrawable layerDrawable = new LayerDrawable(layers);
但是当然,如果从一开始就只使用
Drawables
会更好,在这种情况下,代码可以简化为:final List<Drawable> images = ...;
final LayerDrawable layerDrawable = new LayerDrawable(images.toArray(new Drawable[images.size()]));
您可以在official documentation中找到有关
LayerDrawable
的更多信息!