2011-07-26 13 views
5

este es mi programa de galería, en el que estoy mostrando el contenido con archivos estáticos, cómo modificar este programa para mostrar las fotos en la tarjeta SD, si no hay fotos o tarjeta SD dar una alertaGalería de Android mostrar imágenes de SDcard

package DisplayViewsExample.com; 

import android.app.Activity; 
import android.os.Bundle; 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Gallery; 
import android.widget.ImageView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 




    public class DisplayViewsExampleActivity extends Activity { 

Integer[] imageIDs = { 
      R.drawable.sample_1, 
      R.drawable.sample_2, 
      R.drawable.sample_3 

    }; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Gallery gallery = (Gallery) findViewById(R.id.gallery1); 

    gallery.setAdapter(new ImageAdapter(this));   
    gallery.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView parent, 
     View v, int position, long id) 
     {     
    /*  Toast.makeText(getBaseContext(), 
        "pic" + (position + 1) + " selected", 
        Toast.LENGTH_SHORT).show();*/ 
      ImageView imageView = (ImageView) findViewById(R.id.image1);     
      imageView.setImageResource(imageIDs[position]); 

     } 
    }); 

} 
public class ImageAdapter extends BaseAdapter 
{ 
    private Context context; 
    private int itemBackground; 

    public ImageAdapter(Context c) 
    { 
     context = c; 
     //---setting the style--- 
     TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
     itemBackground = a.getResourceId(
      R.styleable.Gallery1_android_galleryItemBackground, 0); 
     a.recycle();      
    } 

    //---returns the number of images--- 
    public int getCount() { 
     return imageIDs.length; 
    } 

    //---returns the ID of an item--- 
    public Object getItem(int position) { 
     return position; 
    }    

    public long getItemId(int position) { 
     return position; 
    } 

    //---returns an ImageView view--- 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = new ImageView(context); 
     imageView.setImageResource(imageIDs[position]); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); 
     imageView.setBackgroundResource(itemBackground); 
     return imageView; 
    } 


}  

} 

Respuesta

0

la función

Environment.getExternalStoragePublicDirectory(String type) 

le da acceso a la extorage externa. Incluso hay contants para los nombres de carpeta estándar más comunes.

No olvides poner el permiso para acceder al manifiesto.

1

Debe establecer el permiso en su Manifiesto primera:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

A continuación, escribir la función que recurrentemente recupera todos los archivos de imagen desde SD:

final static String[] IMAGE_FORMATS = new String[] { 
     ".JPEG", ".GIF", ".PNG", ".BMP"}; 

public static ArrayList<File> getImageFilesFromSD() { 

    File dir = Environment.getExternalStorageDirectory(); 

    if (dir == null || !dir.exists()) 
     return null; 

    ArrayList<File> images = getImageFilesFromDir(dir); 
    return images; 

} 

private static ArrayList<File> getImageFilesFromDir(File dir) { 
    File[] files = dir.listFiles(); 
    ArrayList<File> result = new ArrayList<File>(); 
    if (files != null) 
     for (File file : files) { 
      if (file.isDirectory()) { 
       result.addAll(getImageFilesFromDir(file)); 
      } else { 
       final String fileName = file.getName(); 
       final String fileNameLwr = fileName.toLowerCase(); 
       // filtering images by extension 
       boolean contains = false; 
       for (int i = 0; i < IMAGE_FORMATS.length; i++) { 
        final String formatLwr = IMAGE_FORMATS[i].toLowerCase(); 
        if (fileNameLwr.endsWith(formatLwr)) { 
         contains = true; 
         break; 
        } 
       } 
       if (contains) { 
        result.add(file); 
       } 
      } 
     } 
    return result; 
} 

Después de que en el adaptador de la lista:

imageView.setImageURI(Uri.fromFile(file)); 

donde file es el elemento de ArrayList devuelta por getImageFilesFromSD() función.

Buena suerte.

Cuestiones relacionadas