Android - 具有多个位图的Imageview

时间:2015-12-16 21:19:39

标签: android android-layout android-imageview android-glide android-custom-drawable

我正在开发一个聊天应用程序,它需要显示我正在聊天的每个人的个人资料图片。如果是群组对话,我需要设计类似FB的布局,如下所示

enter image description here

我正在考虑使用LayerDrawable来实现它,但不确定如何实现它。此外,图像需要从server加载。我正在使用Glide库来加载images

1 个答案:

答案 0 :(得分:1)

是的,您需要实施LayerDrawable。在StackOverflow上,overlay two images in android to set an imageview issue

中有一些如下例子
  

您可以跳过复杂的Canvas操作并完全执行此操作   Drawables,使用LayerDrawable。您有两种选择之一:   您可以在XML中定义它,然后只需设置图像,或者您   可以在代码中动态配置LayerDrawable

     

解决方案#1(通过XML):

     

创建一个新的Drawable XML文件,我们称之为layer.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/t" />
    <item android:drawable="@drawable/tt" />
</layer-list>
     

现在使用Drawable设置图像:

testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));
     

解决方案#2(动态):

Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.t);
layers[1] = r.getDrawable(R.drawable.tt);
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);
     

(我还没有测试过这段代码,所以可能会有错,但是这个   一般大纲应该有效。)

另一种可能的解决方案可能来自unable to set multiple bitmap in one imageview

  

您可以执行以下操作:

public Bitmap drawMultipleBitmapsOnImageView(Bitmap b) {
      Bitmap drawnBitmap = null;

      try {
          drawnBitmap = Bitmap.createBitmap(400, 400, Config.ARGB_8888);

          Canvas canvas = new Canvas(drawnBitmap);
                     // JUST CHANGE TO DIFFERENT Bitmaps and coordinates .
          canvas.drawBitmap(b, 100, 100, null);
          canvas.drawBitmap(b, 200, 300, null);
          canvas.drawBitmap(b, 100, 200, null);
          canvas.drawBitmap(b, 300, 350, null);

      } catch (Exception e) {
          e.printStackTrace();
      }
      return drawnBitmap;
  }
     

您可以像下面这样调用此方法:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView);
      Bitmap bitmap = ((BitmapDrawable) myImageView.getDrawable())
              .getBitmap();
      Bitmap b = drawMultipleBitmapsOnImageView(bitmap);

      myImageView.setImageBitmap(b);

如果您仍感到不满意,请查看Android : How to Draw multiple images inside the same imageview but shifted in the y coordinate?

  

将此代码用于一张图片中的show 2图像:

    ImageView myImageView = (ImageView) findViewById(R.id.img1);
    Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.call);
    Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.available);
    Bitmap combinedBitmap = getCombinedBitmap(pic2, pic1);

    myImageView.setImageBitmap(b);
     

这是 getCombinedBitmap()方法:

public Bitmap getCombinedBitmap(Bitmap b, Bitmap b2) {
    Bitmap drawnBitmap = null;

    try {
        drawnBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

        Canvas canvas = new Canvas(drawnBitmap);
        // JUST CHANGE TO DIFFERENT Bitmaps and coordinates .
        canvas.drawBitmap(b, 0, 0, null);
        canvas.drawBitmap(b2, 0, 0, null);
        //for more images :
        // canvas.drawBitmap(b3, 0, 0, null);
        // canvas.drawBitmap(b4, 0, 0, null);

    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return drawnBitmap;
}

您还可以访问: Draw multiple bitmaps on Imageview

在网络上你也可以找到一些教程,但我不认为那里提出的解决方案与上面的内容大不相同。

最后,一旦你完成了它就可以使用这个库:https://github.com/hdodenhof/CircleImageView

希望有所帮助