Android - 将多个图像合并为一个 ImageView
Android - combine multiple images into one ImageView
我正在寻求帮助开发(或图书馆),它可以让我将多个图像合并到一个图像视图中。
我的应用程序将用户之间的交互分组在一起,而不是单独显示它们,因此我想合并他们所有的化身,以便一个适配器单元可视化一个 "group"。
在 facebook.com 的聊天中有一个很好的例子:
我的问题是,如何在 Android / Java 中提供此功能?据推测,它可能有 1 到 4 个图像。请让我知道您可以提供的任何建议:)
您应该将位图重叠到另一个位图上。第一种方法是:
Merge bitmaps
您可以使用复杂的矩阵、订单和大小 UI。
您可以使用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 class 中按 ID 查找视图:
final MultiImageView multiImageView = (MultiImageView) findViewById(R.id.iv);
要将图像添加到 MultiImageView,请使用方法 addImage(Bitmap bitmap)。例如:
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 link 了解更多信息:
我想这就是你需要的
我知道这是一个老问题,但也许它会对其他人有所帮助。
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;
}
我正在寻求帮助开发(或图书馆),它可以让我将多个图像合并到一个图像视图中。
我的应用程序将用户之间的交互分组在一起,而不是单独显示它们,因此我想合并他们所有的化身,以便一个适配器单元可视化一个 "group"。
在 facebook.com 的聊天中有一个很好的例子:
我的问题是,如何在 Android / Java 中提供此功能?据推测,它可能有 1 到 4 个图像。请让我知道您可以提供的任何建议:)
您应该将位图重叠到另一个位图上。第一种方法是:
Merge bitmaps
您可以使用复杂的矩阵、订单和大小 UI。
您可以使用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 class 中按 ID 查找视图:
final MultiImageView multiImageView = (MultiImageView) findViewById(R.id.iv);
要将图像添加到 MultiImageView,请使用方法 addImage(Bitmap bitmap)。例如:
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 link 了解更多信息:
我想这就是你需要的
我知道这是一个老问题,但也许它会对其他人有所帮助。
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;
}