我正在开发一个聊天应用程序,它需要显示我正在聊天的每个人的个人资料图片。如果是群组对话,我需要设计类似FB
的布局,如下所示
我正在考虑使用LayerDrawable
来实现它,但不确定如何实现它。此外,图像需要从server
加载。我正在使用Glide库来加载images
。
答案 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
希望有所帮助