Mark A Barr
Mark A Barr

Reputation: 77

Android Viewpager to load images from SD Card

Guys Im using the following custom code to load 20 images from resources and present in a viewpager

public class CustomPagerAdapter extends PagerAdapter {
int[] mResources = {
        R.drawable.slide1,
        R.drawable.slide2,
        R.drawable.slide3,
        R.drawable.slide4,
        R.drawable.slide5,
        R.drawable.slide6,
        R.drawable.slide7,
        R.drawable.slide8,
        R.drawable.slide9,
        R.drawable.slide10,
        R.drawable.slide11,
        R.drawable.slide12,
        R.drawable.slide13,
        R.drawable.slide14,
        R.drawable.slide15,
        R.drawable.slide16,
        R.drawable.slide17,
        R.drawable.slide18,
        R.drawable.slide19,
        R.drawable.slide20,


};
Context mContext;
LayoutInflater mLayoutInflater;

public CustomPagerAdapter(Context context) {
    mContext = context;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((LinearLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

    ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
    imageView.setImageResource(mResources[position]);

    container.addView(itemView);

    return itemView;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((LinearLayout) object);
}
}

This works fine but I want to put the jpgs in a directory on the device so that they can be changed without recompiling the app

I think I need to get the images into the mResource array. I can get the path but not sure what format the code should be instead of using the draw-able lines

i have read articles on here but none make sense to me I am really new to this and the code looks nothing like the code I am using

can anyone point me in the right direction?

Any help is greatly appreciated

Mark

Upvotes: 0

Views: 603

Answers (1)

Aritra Roy
Aritra Roy

Reputation: 15615

Yes, you can certainly do so. I will try to explain you the process step-by-step,

Step 1

Have a File object pointing to the path, like,

File directory = new File("path-to-directory");

Ensure that the path is to the directory with the images,

Step 2

List all the files inside the directory using listFiles() method, like

File[] allImages = directory.listFiles();

Now you have an array of all the files just like int[] mResources. The only difference being, now you have actual file references, while previously you had resource ids.

Step 3

You can just display the images in the ViewPager just like you did previously. But this is a bit tricky and can take you a considerable amount of time and code to get an image properly displayed from File.

You also need to take care of caching, so that when you load a previously loaded image again, it gets it from the cache.

To do all this, I recommend you to use this library (recommended by Google), Glide.

Setting an image is one line of code,

Glide.with(context).from(file).into(imageView);

That's it. Now you have your images displayed in a ViewPager from a directory in the device.

Upvotes: 1

Related Questions