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

 }
}

No comments:

Post a Comment