Today i will tell about a program which initiate camera to capure an image.
The aim of this program is stated as:
1.Start camera for taking photo.
2.Show all images in a custom gallery.
3.Give appropriate caption for each photo.
4.Click on photo to view in large and can delete it.
5.View the name and caption of all photoes you captured in a dynamic way( TextView created dynamically).
CameraActivity .java
==========================
package com.rajuandroid;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class CameraActivity extends Activity {
protected boolean _taken;
protected String _path;
protected static final String PHOTO_TAKEN = "photo_taken";
private List<String> fileList;
private Button camera;
private Gallery galleryView;
private FileInputStream fs=null;
String lable="label";
String selectedFileNamePath="";
static String externalImagePath="";
private String selectedimage;
private Hashtable<String, String> lableList = new Hashtable<String, String>();
public void refreshImageGallery()
{
galleryView.setAdapter(new ImageAdapter(CameraActivity.this,ReadSDCard()));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
camera=(Button)findViewById(R.id.camera);
camera.setOnClickListener( new ButtonClickHandler());
galleryView=( Gallery) findViewById(R.id.galleryview);
galleryView.setAdapter(new ImageAdapter(this,ReadSDCard()));
galleryView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v, final int position, long id) {
fileList=ReadSDCard();
if(fileList != null && !fileList.isEmpty())
{
selectedimage= fileList.get(position).toString();
final Dialog dialog = new Dialog(CameraActivity.this);
dialog.setContentView(R.layout.myimage);
dialog.setTitle("Full Image Here");
dialog.setCancelable(true);
ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
try {
fs = new FileInputStream(new File(selectedimage));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bm = null;
try {
if(fs!=null)
bm=BitmapFactory.decodeFileDescriptor(fs.getFD());
} catch (IOException e) {
e.printStackTrace();
} finally{
if(fs!=null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
img.setImageBitmap( bm );
Button cancel = (Button) dialog.findViewById(R.id.Button01);
cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
Button delete = (Button) dialog.findViewById(R.id.Button02);
delete.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(CameraActivity.this);
alertbox.setTitle("Are you sure want to delete this image?");
alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
File file = new File( selectedimage);
file.delete();
if(true){
Toast.makeText(getApplicationContext(),"Image Deleted", Toast.LENGTH_SHORT).show();
}
refreshImageGallery();
dialog.dismiss();
}
});
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
alertbox.show();
}
});
//now that the dialog is set up, it's time to show it
dialog.show();
}
}
});
Button showLebel=(Button)findViewById(R.id.next);
showLebel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(CameraActivity.this, ShowAllLebels.class);
intent.putExtra("allLebelHashTable",lableList); //passing HashTable object
startActivityForResult(intent,0);
}
});
}
public class ButtonClickHandler implements View.OnClickListener {
public void onClick( View view ){
startCameraActivity();
}
}
protected void startCameraActivity(){
externalImagePath = "";
externalImagePath = Environment.getExternalStorageDirectory() + "/Raju/";
File dir = new File(externalImagePath);
try{
if (!dir.exists()) {
if(dir.mkdirs()) {
System.out.println("Directory created");
} else {
System.out.println("Directory is not created");
}
}
}catch(Exception e){
e.printStackTrace();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("HHmmss");
Date date = new Date();
String curTime=dateFormat.format(date);
_path = Environment.getExternalStorageDirectory() +"/Raju/image"+ curTime +".jpg";
System.out.println( _path);
Log.i("MakeMachine", "startCameraActivity()" );
File file = new File( _path );
Uri outputFileUri = Uri.fromFile( file );
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
startActivityForResult( intent, 0 );
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
Log.i( "MakeMachine", "resultCode: " + resultCode );
switch( resultCode )
{
case 0:
break;
case -1:
onPhotoTaken();
break;
}
}
protected void onPhotoTaken(){
Log.i( "MakeMachine", "onPhotoTaken" );
_taken = true;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
BitmapFactory.decodeFile( _path, options );
fileList=ReadSDCard();
galleryView.setAdapter(new ImageAdapter(this,fileList));
}
@Override
protected void onRestoreInstanceState( Bundle savedInstanceState){
Log.i( "MakeMachine", "onRestoreInstanceState()");
if( savedInstanceState.getBoolean( CameraActivity.PHOTO_TAKEN ) ) {
onPhotoTaken();
}
}
@Override
protected void onSaveInstanceState( Bundle outState ) {
outState.putBoolean( CameraActivity.PHOTO_TAKEN, _taken );
}
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private List<String> FileList;
private LayoutInflater mInflater;
public ImageAdapter(Context c, List<String> fList) {
FileList = fList;
TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
ta.recycle();
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if(FileList != null)
return FileList.size();
else
return 0;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.mygrid, null);
holder.imageview = (ImageView) convertView.findViewById(R.id.imagepart);
holder.edittext = (EditText) convertView.findViewById(R.id.textpart);
holder.edittext.setFocusable(false);
holder.edittext.setId(position);
holder.edittext.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TextView title3 = new TextView(CameraActivity.this);
title3.setText("Make label");
title3.setPadding(10, 10, 10, 10);
title3.setGravity(Gravity.CENTER);
title3.setTextColor(Color.WHITE);
title3.setHeight(60);
title3.setTextSize(20);
final AlertDialog.Builder alert = new AlertDialog.Builder(CameraActivity.this);
LayoutInflater factory = LayoutInflater.from(CameraActivity.this);
final View textEntryView = factory.inflate(R.layout.mail_main, null);
final EditText mTo = (EditText)textEntryView.findViewById(R.id.to);
if(lableList.containsKey(new File(FileList.get(position).toString()).getName()))
mTo.setText(lableList.get(new File(FileList.get(position).toString()).getName()));
alert.setCustomTitle(title3);
alert.setView(textEntryView);
alert.setPositiveButton("Done", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
lableList.put(new File(FileList.get(position).toString()).getName(), mTo.getText().toString());
holder.edittext.setText(mTo.getText().toString());
dialog.cancel();
}
});
alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
alert.show();
}
});
Bitmap bm = null;
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inDither=false; //Disable Dithering mode
bfOptions.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
bfOptions.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
bfOptions.inTempStorage=new byte[16 * 1024];
FileInputStream fs1=null;
try {
fs1 = new FileInputStream(new File(FileList.get(position).toString()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if(fs1!=null)
bm=BitmapFactory.decodeFileDescriptor(fs1.getFD(), null, bfOptions);
holder.imageview.setImageBitmap(bm);
holder.imageview.setScaleType(ImageView.ScaleType.FIT_XY);
holder.imageview.setBackgroundResource(mGalleryItemBackground);
if(lableList.containsKey(new File(FileList.get(position).toString()).getName()))
holder.edittext.setText(lableList.get(new File(FileList.get(position).toString()).getName()));
} catch (IOException e) {
e.printStackTrace();
} finally{
if(fs!=null) {
try {
fs.close();
} catch (IOException e) { e.printStackTrace(); }
}
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
public TypedArray obtainStyledAttributes(int theme) {
return null;
}
private List<String> ReadSDCard(){
List<String> tFileList = new ArrayList<String>();
File f = new File("/sdcard/Raju/");
Log.i("f",""+f);
if (f.exists()) {
File[] files=f.listFiles();
Log.i("files",""+files);
for(int i=0; i<files.length; i++){
File file = files[i];
tFileList.add(file.getPath());
}
return tFileList;
}
return null;
}
class ViewHolder
{
ImageView imageview;
EditText edittext;
int id;
}
}
=======================
package com.rajuandroid;
import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TableLayout;
import android.widget.TextView;
public class ShowAllLebels extends Activity {
HashMap<String, String> lableList;
String lable;
TextView txtView;
TableLayout tableLayout1;
RelativeLayout.LayoutParams lay1 = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Serializable extras = getIntent().getSerializableExtra("allLebelHashTable");//used to retrive Hashtable objectif(extras != null){
lableList=(HashMap<String, String>) extras; //here typecasted to HashMap object
}
setContentView(R.layout.show_details);
tableLayout1 = (TableLayout)findViewById(R.id.tableId1);
File f = new File("/sdcard/Raju/");
if (f.exists()){
File[] files=f.listFiles();
System.out.println("no of files===="+files.length);
for(int i=0; i<files.length; i++){
File file = files[i];
lable = "";
lable = lableList.get(file.getName());
if(null==lable||"".equalsIgnoreCase(lable)){
lable="NA";
}
txtView = new TextView(ShowAllLebels.this);
txtView.setTextColor(Color.YELLOW);
txtView.setTextSize(15);
txtView.setTypeface(Typeface.DEFAULT_BOLD);
txtView.setPadding(5, 5, 5, 5);
txtView.setText("Name & Lebel:");
lay1.setMargins(5, 5, 5, 5);
lay1.addRule(RelativeLayout.RIGHT_OF, txtView.getId());
tableLayout1.addView(txtView, lay1);
txtView = new TextView(ShowAllLebels.this);
txtView.setTextColor(Color.WHITE);
txtView.setTextSize(15);
txtView.setTypeface(Typeface.DEFAULT_BOLD);
txtView.setPadding(40, 5, 40, 0);
txtView.setText("/sdcard/Raju/"+file.getName());
lay1.setMargins(5, 5, 5, 5);
lay1.addRule(RelativeLayout.BELOW, txtView.getId());
tableLayout1.addView(txtView, lay1);
txtView = new TextView(ShowAllLebels.this);
txtView.setTextColor(Color.RED);
txtView.setTextSize(15);
txtView.setTypeface(Typeface.DEFAULT_BOLD);
txtView.setPadding(40, 5, 40, 0);
txtView.setText(lable);
lay1.setMargins(5, 5, 5, 5);
lay1.addRule(RelativeLayout.BELOW, txtView.getId());
tableLayout1.addView(txtView, lay1);
}
}
txtView = new TextView(ShowAllLebels.this);
txtView.setPadding(40, 5, 40, 0);
lay1.setMargins(5,5,5,10);
lay1.addRule(RelativeLayout.BELOW, txtView.getId());
tableLayout1.addView(txtView, lay1);
}
}
3.layout/main.xml
=============================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:weightSum="1" android:background="#000000" android:orientation="vertical" android:layout_height="fill_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="70dp"
android:id="@+id/layoutTop"
android:background="#336699"
>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:src="@+drawable/logo"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="7dp"
/>
</RelativeLayout>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:layout_below="@+id/layoutTop"
>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layoutMiddle"
android:layout_below="@+id/layoutTop">
<Gallery android:id="@+id/galleryview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/galleryview"
android:layout_margin="10dp"
android:text=" Add Photo "
android:layout_centerHorizontal="true"
/>
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/camera"
android:layout_margin="10dp"
android:text="Show All Lebel"
android:layout_centerHorizontal="true"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="20dp"
android:id="@+id/text_view1"
android:textSize="17sp"
android:text=""
android:layout_margin="20dp"
android:layout_below="@+id/next"/>
</RelativeLayout>
</ScrollView>
<RelativeLayout android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#336699"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/footer_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="15dp"
android:textSize="10sp"
android:textColor="#ffffff"
android:text="© 2012 RajuAndroidBlog,All rights reserved"
android:textStyle="normal"
/>
</RelativeLayout>
</RelativeLayout>
4.layout/mail_main.xml
====================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_marginLeft="3dip"
android:layout_marginRight="3dip">
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/to"
android:layout_marginTop="3dip"
android:layout_marginLeft="3dip"
android:layout_marginRight="3dip"
android:singleLine="true"
></EditText>
</RelativeLayout>
5.layout/mygrid.xml
====================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/imagepart"
android:layout_width="150dp"
android:layout_height="150dp"
/>
<EditText
android:id="@+id/textpart"
android:layout_width="150dp"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:cursorVisible="false"
android:layout_below="@+id/imagepart"/>
</RelativeLayout>
6.layout/myimage.xml
======================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
android:id="@+id/mainlayout">
<ImageView
android:id="@+id/ImageView01"
android:layout_width="390dp"
android:layout_height="420dp"
android:scaleType="fitXY" />
<Button
android:text="Delete"
android:id="@+id/Button02"
android:layout_width="70dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
/>
<Button android:layout_width="70dp"
android:id="@+id/Button01"
android:layout_height="40dp"
android:text="Close"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"></Button>
</RelativeLayout>
7.layout/show_details.xml
======================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:weightSum="1" android:background="#000000" android:orientation="vertical" android:layout_height="fill_parent">
<!-- Header Starts-->
<RelativeLayout
android:id="@+id/header"
android:layout_width="fill_parent"
android:layout_height="70dp"
android:background="#336699"
android:paddingBottom="5dip"
android:paddingTop="5dip" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginRight="1dp"
android:layout_marginTop="7dp"
android:src="@drawable/logo" />
</RelativeLayout>
<!-- Header Ends -->
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:id="@+id/layoutMiddle"
android:layout_below="@+id/header"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/layout2"
android:layout_below="@+id/layout1"
android:background="#000000"
android:layout_marginLeft="2dp"
android:layout_weight="1"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Name and Lebel of all Photoes"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textColor="#FFFF00"
android:textStyle="bold"
/>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:stretchColumns="1"
android:id="@+id/tableId1">
<TableRow android:id="@+id/rowId1"
android:layout_marginLeft="20dp">
</TableRow>
</TableLayout>
</RelativeLayout>
</LinearLayout>
</ScrollView>
<RelativeLayout android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#336699"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/footer_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="15dp"
android:textSize="10sp"
android:textColor="#ffffff"
android:text="© 2012 RajuAndroidBlog,All rights reserved"
android:textStyle="normal"
/>
</RelativeLayout>
</RelativeLayout>
8.values/attributes.xml
==================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery1">
<attr name="android:galleryItemBackground"/>
</declare-styleable>
</resources>
9.In manifest add following lines
=================================
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
Thnxx a lot sir... Let me ask you one question.. I have one activity in which there is only one button " Create Account" and a list. When i tap on Create Acount button , a new Page is open with GUI form . there is a lot of components like Click photo, name, radio groups.. and so on.. after filling all details, when i Hit submit, a ImageView with His/Her name should be display above on that activity Create Account..Please help me
ReplyDeleteHi.., excellent websites you possess at this time there.|
ReplyDeleteDell Boomi Atom Sphere Online Course
Thanks for the great informative article....
ReplyDeleteBoomi Training