android - create gallery with photos from sdcard
<p>I am trying to create gallery with photos from sdcard. I have a database table. One of the columns in the table has a path to a photo. </p>

<p>I am following this link as a guideline, but this sample code retrieves image ids from res/drawable directory. I am not sure how to modify it to make my code work.</p>

<p><a href="http://saigeethamn.blogspot.com/2010/05/gallery-view-android-developer-tutorial.html" rel="nofollow">http://saigeethamn.blogspot.com/2010/05/gallery-view-android-developer-tutorial.html</a></p>

<p>But as mentioned, I want to display photos with whatever images exist in the database table. The following code is ImageAdapter.</p>

<pre><code>    public class ImageAdapter extends BaseAdapter {

    private Context ctx;

    int imageBackground;

    public ImageAdapter(Context c) {
        ctx = c;
        TypedArray ta = obtainStyledAttributes(R.styleable.milestone_style);
        imageBackground = ta.getResourceId(R.styleable.milestone_style_android_galleryItemBackground, 1);
        ta.recycle();
    }

    @Override
    public int getCount() {
        return imagePhotosLocations.length;
    }

    @Override
    public Object getItem(int arg0) {

        return arg0;
    }

    @Override
    public long getItemId(int arg0) {

        return arg0;
    }

    @Override
    public View getView(int position, View arg1, ViewGroup arg2) {
        if (milestones != null &amp;&amp; !milestones.isEmpty()) {
            Milestone milestone = milestones.get(0);
            String imageFileLocation = milestone.getFileLocation();
            System.out.println("imageFileLocation="+imageFileLocation);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 26;
            Bitmap b;
            ImageView iv = new ImageView(ctx);
            try {
                if (imageFileLocation.startsWith("content://")) {
                    b = BitmapFactory.decodeStream(getContentResolver().openInputStream(Uri.parse(imageFileLocation)), null, options);
                } else {
                    b = BitmapFactory.decodeFile(imageFileLocation, options);
                }
                iv.setImageBitmap(b);
                iv.setScaleType(ImageView.ScaleType.FIT_XY);
                iv.setLayoutParams(new Gallery.LayoutParams(150, 120));
                // milestoneImageView.setBackgroundResource(imageBackground);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            return iv;
        }
        return null;
    }
}
</code></pre>

<p>And this is one of the methods in activity.</p>

<pre><code>private String[] imagePhotosLocations;

private void init() {
    milestones = getMilestones();
    imagePhotosLocations = new String[milestones.size()];
    int index = 0;
    for (Milestone milestone : milestones) {
        imagePhotosLocations[index++] = milestone.getFileLocation();
    }
}

private void initializeGallery() {
    milestoneImageView = (ImageView) this.findViewById(R.id.imagePhoto);
    Gallery milestoneGallery = (Gallery) this.findViewById(R.id.milestoneGallery);
    if (milestoneGallery == null) {
        throw new IllegalArgumentException("milestoneGallery can not be null.");
    }
    milestoneGallery.setAdapter(new ImageAdapter(this));
    milestoneGallery.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1, int which, long arg3) {
            String imageFileLocation = imagePhotosLocations[which];
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 26;
            Bitmap b;
            try {
                if (imageFileLocation.startsWith("content://")) {
                    b = BitmapFactory.decodeStream(getContentResolver().openInputStream(Uri.parse(imageFileLocation)), null, options);
                } else {
                    b = BitmapFactory.decodeFile(imageFileLocation, options);
                }
                milestoneImageView.setImageBitmap(b);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    });
}
</code></pre>
