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

时间:2015-07-14 11:54:20

标签: java android bitmap imageview

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

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

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

Image showing combined avatars

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

3 个答案:

答案 0 :(得分:11)

您可以使用MultiImageView。

app.gradle 中添加依赖关系:

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

将MultiImageView添加到布局xml文件

<com.stfalcon.multiimageview.MultiImageView
    android:id="@+id/iv"
    android:layout_width="100dp"
    android:layout_height="100dp"/>

在java类中,按id:

查找视图
final MultiImageView multiImageView = (MultiImageView) findViewById(R.id.iv);

要将图像添加到MultiImageView,请使用方法addImage(Bitmap bitmap)。对于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

enter image description here
检查github链接以获取更多信息:

我认为这是你需要的

答案 1 :(得分:0)

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

Merge bitmaps

您可以使用矩阵,订单和尺寸来处理复杂的用户界面。

答案 2 :(得分:0)

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

private Bitmap mergeThemAll(List<Bitmap> 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;
}