你需要的是一个
LayerDrawable -
一个管理其他Drawable数组的Drawable。它们按照数组顺序绘制,因此具有最大索引的元素将绘制在顶部。
你有两种选择来使用
LayerDrawable
。您可以在单独的drawable xml中定义它,然后简单地设置图像在您的
ImageView
中,或者您可以在代码中动态配置
LayerDrawable
。然而,由于您希望这个过程是动态的,所以您需要下面提到的编程方法。
使用代码进行编程
您需要将您捕获的图片转换为一个
Drawable
,使用
BitmapDrawable
就可以实现:
```java
Bitmap bitmap = BitmapFactory.decodeFile("your_image_path");
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
```
然后,您可以创建一个
LayerDrawable
并将其添加到您的
ImageView
中,如下所示:
```java
Drawable[] layers = new Drawable[2];
layers[0] = getResources().getDrawable(R.drawable.your_first_drawable);
layers[1] = drawable;
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);
```
Resources r = getResources();
Drawable d = new BitmapDrawable(r,yourBitmap);//converting bitmap to drawable
Drawable[] layers = new Drawable[2];
layers[0] = d;
layers[1] = r.getDrawable(R.drawable.star_big_on);
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);
现在你的
ImageView
上有两个图像(1.你拍摄的图像和2.star_big_on)。
编辑
如果你想要新创建的图像(带有2个添加的图像)存储在画廊中,你需要执行以下操作来存储你的图像:
int width = layerDrawable.getIntrinsicWidth();
int height = layerDrawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
layerDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
layerDrawable.draw(canvas);
//and then the following line will store it in the gallery
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap , "yourTitle" , "yourDescription");
现在按照上述步骤,您的图像将被添加到相册的末尾。如果您希望它存储在相册的开头,请
参考此代码。
如果您想要从相册中删除在拍摄照片后存储的原始图像,您可以
参考此SO问题。在这个问题中,您将看到类似于
file.getPath()
的内容,它就是所需删除图像的路径。因此,如果您想获取捕获图像的路径,请
参考此SO问题。希望现在您已经掌握了实现您想要的一切。
注意:如果您想知道如何通过XML使用
LayerDrawable
:
使用XML
创建一个新的Drawable XML文件,让我们称其为mylayer.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/yourcapturedimage" />
<item android:drawable="@drawable/star_big_on" />
</layer-list>
现在在您的Activity
中使用该Drawable
设置图像:
imageView.setImageDrawable(getResources().getDrawable(R.layout.mylayer))
ImageView
向用户显示从相机拍摄的同一张照片? - Sash_KP