Pages - Menu

Pages - Menu

Tuesday, 22 May 2012

How to add EditText to the image in Gallery and also camera activity in android.


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;
}
}

2.ShowAllLebels.java
=======================

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 object
       if(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"/>