Showing posts with label GridView loading photos from SD Card folder. Show all posts
Showing posts with label GridView loading photos from SD Card folder. Show all posts

Wednesday, 23 April 2014

GridView loading photos from SD Card folder

Add a <GridView> in layout.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:columnWidth="90dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:gravity="center"/>

</LinearLayout>

Main code:


package com.example.androidgridview;

import java.io.File;
import java.util.ArrayList;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class Addnewwallpaper extends Activity
{

 ArrayList<String> itemList = new ArrayList<String>();


 ImageAdapter myImageAdapter;

 Button addimg ;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.addnewwallpaper);

  addimg =  (Button) findViewById(R.id.addimg);
  addimg.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent i = new Intent(Addnewwallpaper.this, ChooseFoldertoaddInPhotovoltActivity.class);
    startActivity(i);

   }
  });
  final GridView gridview = (GridView) findViewById(R.id.gridview);
  myImageAdapter = new ImageAdapter(this);
  gridview.setAdapter(myImageAdapter);

  String ExternalStorageDirectoryPath = Environment
    .getExternalStorageDirectory()
    .getAbsolutePath();

  String targetPath = ExternalStorageDirectoryPath + "/Livewallaper/";

  // Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show();
  File targetDirector = new File(targetPath);

  File[] files = targetDirector.listFiles();
  for (File file : files){
   myImageAdapter.add(file.getAbsolutePath());
  } 


  gridview.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int position,
     long arg3) {
    // TODO Auto-generated method stub

    //Toast.makeText(getApplicationContext(), ""+itemList.get(position), Toast.LENGTH_LONG).show();
    File filederectory = new File(itemList.get(position).toString());
    DeleteRecursive(filederectory);

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
      Uri.parse("file://"
        + Environment.getExternalStorageDirectory())));

    itemList.clear();
    itemList = new ArrayList<String>();

    String ExternalStorageDirectoryPath = Environment
      .getExternalStorageDirectory()
      .getAbsolutePath();

    String targetPath = ExternalStorageDirectoryPath + "/Livewallaper/";

    // Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show();
    File targetDirector = new File(targetPath);

    File[] files = targetDirector.listFiles();
    for (File file : files){
     myImageAdapter.add(file.getAbsolutePath());
    } 
    myImageAdapter.notifyDataSetChanged();
    gridview.invalidateViews();
    gridview.setAdapter(new ImageAdapter(Addnewwallpaper.this));
    myImageAdapter.notifyDataSetChanged();
   }
  });
 }
 void DeleteRecursive(File fileOrDirectory) {

  if (fileOrDirectory.isDirectory())
   for (File child : fileOrDirectory.listFiles())
    DeleteRecursive(child);

  fileOrDirectory.delete();

 }

 public class ImageAdapter extends BaseAdapter {

  private Context mContext;


  public ImageAdapter(Context c) {
   mContext = c; 
  }

  void add(String path){
   itemList.add(path); 
  }

  @Override
  public int getCount() {
   return itemList.size();
  }

  @Override
  public Object getItem(int arg0) {
   // TODO Auto-generated method stub
   return null;
  }

  @Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return 0;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   ImageView imageView;
   if (convertView == null) {  // if it's not recycled, initialize some attributes
    imageView = new ImageView(mContext);
    imageView.setLayoutParams(new GridView.LayoutParams(220, 220));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);
   } else {
    imageView = (ImageView) convertView;
   }

   Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220);

   imageView.setImageBitmap(bm);
   return imageView;
  }

  public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) {

   Bitmap bm = null;
   // First decode with inJustDecodeBounds=true to check dimensions
   final BitmapFactory.Options options = new BitmapFactory.Options();
   options.inJustDecodeBounds = true;
   BitmapFactory.decodeFile(path, options);

   // Calculate inSampleSize
   options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

   // Decode bitmap with inSampleSize set
   options.inJustDecodeBounds = false;
   bm = BitmapFactory.decodeFile(path, options); 

   return bm;   
  }

  public int calculateInSampleSize(

    BitmapFactory.Options options, int reqWidth, int reqHeight) {
   // Raw height and width of image
   final int height = options.outHeight;
   final int width = options.outWidth;
   int inSampleSize = 1;

   if (height > reqHeight || width > reqWidth) {
    if (width > height) {
     inSampleSize = Math.round((float)height / (float)reqHeight);    
    } else {
     inSampleSize = Math.round((float)width / (float)reqWidth);    
    }   
   }

   return inSampleSize;    
  }

 }
}