I have been working on a camera app and everything is working with taking and saving the picture. But I would like to have the Imageview I show when taking the picture to be saved in the actual picture when it is taken. Is that possible?
Right now I have been trying to have the imageView in the same Layout as where I draw the camera preview.
<FrameLayout
android:id="@+id/camera_preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<ImageView
android:layout_width="50pt"
android:layout_height="50pt"
android:layout_gravity="center"
android:src="@android:drawable/star_big_on"
/>
</FrameLayout>
I thought that maybe if it was drawn on the same view as the camera is then it would also saw that image together with the picture.
Does anyone know if this is possible or do I have to take another approach? If so, links to other solutions on how to do this would be appreciated :)
Thanks!
Edit: I have been following this camera tutorial http://developer.android.com/guide/topics/media/camera.html#manifest If anyone is wondering how I save the picture etc
Edit2: For clarification, I want the star in this example to be shown in the taken picture after you take it. So if I take a picture of a wall, I want the star to be shown on that wall when you look at the picture in the gallery afterwards, just as it is when taking the picture!
Open Image Capture. In the sidebar, click on your Android device. Choose the folder where you want to save your pictures using the drop-down menu. Then, select the images you want to transfer and click Download.
What you exactly want is a LayerDrawable -
A Drawable that manages an array of other Drawables. These are drawn in array order, so the element with the largest index will be drawn on top.
You have two choices to use LayerDrawable
.You can either define it in a separate drawable xml and then simply set the image in your ImageView
, or you can configure a LayerDrawable
dynamically in your code.However as you want this to happen dynamically you would require the programmatic approach mentioned below.
Programmatically using code
You need to convert your Bitmap
(which you must have gotten after capturing a picture) into a Drawable
.For that use BitmapDrawable
like this :
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);
Now you have your ImageView
having two images(1.your captured image and 2.star_big_on) set on it.
Edit
As you want the newly created image(with 2 images added to it) to be stored in the gallery, you would do something like this in order to store your image :
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");
Now by doing like above your image will be added to the end of the gallery.If you want it to be stored in the start of gallery, refer this code.
And if you want the original image which was stored in the gallery just after you clicked a photo, to be deleted from the gallery, you can refer this SO question.In this question you will see something like file.getPath()
, which is nothing but the path of the required image to be deleted.So if you want to get the path of the captured image, refer this SO question.Hopefully now you have every idea with you to achieve what you exactly want.
Note : In case you want to know how you use LayerDrawable
via XML
Using XML
Create a new Drawable XML file, let's call it 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>
Now in your Activity
set the image using that Drawable
:
imageView.setImageDrawable(getResources().getDrawable(R.layout.mylayer));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With