【问题标题】:Android - combine multiple images into one ImageViewAndroid - 将多张图片合并为一个 ImageView
【发布时间】:2017-11-02 17:25:59
【问题描述】:

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

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

在 facebook.com 的聊天中做了一个很好的例子:

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

【问题讨论】:

    标签: java android bitmap imageview


    【解决方案1】:

    您可以使用 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)。例如:

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

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

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


    查看github链接了解更多信息:

    我认为这是你需要的

    【讨论】:

    • 我在使用该库时遇到白线问题(图像之间的白线)。有人找到解决方案了吗?
    【解决方案2】:

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

    Merge bitmaps

    您可以在复杂的 UI 中使用矩阵、顺序和大小。

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但也许它会对其他人有所帮助。

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-31
        • 2011-11-04
        • 2022-01-19
        • 2017-12-25
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多