开发者

Android gallery display images from SDcard

开发者 https://www.devze.com 2023-03-23 03:16 出处:网络
this is my gallery program,in which i am displaying the content with static files,how to modify this program to show the photos in the SDcard,if there are no photos or SD card give an alert

this is my gallery program,in which i am displaying the content with static files,how to modify this program to show the photos in the SDcard,if there are no photos or SD card give an alert

 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 onI开发者_如何学GotemClick(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;
    }


}    

}


You should set permission in your Manifest first:

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

Then, write the function which recursively fetches all your image files from 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;
}

After that in your list adapter:

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

where file is the element of ArrayList returned by getImageFilesFromSD()function.

Good luck.


The

Environment.getExternalStoragePublicDirectory(String type)

function gives you access to the external extorage. There are even contants for the most usual standard folder names.

Don't forget to put the permission to access it on the manifest.

0

精彩评论

暂无评论...
验证码 换一张
取 消