Android – 将多个图像合并为一个ImageView

我正在寻找帮助开发(或库),这可以让我将多个图像合并到一个图像视图中。

我的应用程序将用户之间的交互组合在一起,而不是单独显示它们,因此我想合并它们的所有化身,以便一个适配器单元可视化“组”。

一个很好的例子就是在facebook.com的聊天中完成的:

图像显示组合的头像

我的问题是,我如何在Android / Java中提供此function? 据推测,它可以在1到4之间的图像。请让我知道你可以给出的任何建议:)

您可以使用MultiImageView。

app.gradle中添加依赖

compile 'com.github.stfalcon:multiimageview:0.1' 

将MultiImageView添加到布局xml文件

  

在java类中按id查找视图:

 final MultiImageView multiImageView = (MultiImageView) findViewById(R.id.iv); 

要将图像添加到MultiImageView,请使用方法addImage(位图位图)。 对于exapple:

 multiImageView.addImage(BitmapFactory.decodeResource(getResources(), R.drawable.avatar1)); 

对于设置MultiImageView的形状,请使用方法setShape(MultiImageView.Shape shape)。

 multiImageView.setShape(MultiImageView.Shape.RECTANGLE);//Rectangle with round corners multiImageView.setShape(MultiImageView.Shape.CIRCLE);//Circle multiImageView.setShape(MultiImageView.Shape.NONE);//Without shape 

在此处输入图像描述
检查github链接以获取更多信息:

我认为这是你需要的

您应该将位图重叠到另一个位图上。 第一种方法是这样的:

合并位图

您可以使用矩阵,订单和大小来复杂的UI。

我知道这是一个老问题,但也许它会帮助别人。

 private Bitmap mergeThemAll(List orderImagesList) { Bitmap result = null; if (orderImagesList != null && orderImagesList.size() > 0) { // if two images > increase the width only if (orderImagesList.size() == 2) result = Bitmap.createBitmap(orderImagesList.get(0).getWidth() * 2, orderImagesList.get(0).getHeight(), Bitmap.Config.ARGB_8888); // increase the width and height else if (orderImagesList.size() > 2) result = Bitmap.createBitmap(orderImagesList.get(0).getWidth() * 2, orderImagesList.get(0).getHeight() * 2, Bitmap.Config.ARGB_8888); else // don't increase anything result = Bitmap.createBitmap(orderImagesList.get(0).getWidth(), orderImagesList.get(0).getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(result); Paint paint = new Paint(); for (int i = 0; i < orderImagesList.size(); i++) { canvas.drawBitmap(orderImagesList.get(i), orderImagesList.get(i).getWidth() * (i % 2), orderImagesList.get(i).getHeight() * (i / 2), paint); } } else { Log.e("MergeError", "Couldn't merge bitmaps"); } return result; }