Android Viewpager从SD卡加载图像

时间:2016-06-10 17:27:47

标签: image android-viewpager sd-card

伙计我使用以下自定义代码从资源加载20个图像并显示在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);
}
}

这很好但我想将jpgs放在设备上的一个目录中,这样就可以在不重新编译应用程序的情况下更改它们

我想我需要将图像放入mResource数组中。我可以得到路径,但不知道代码应该采用什么格式,而不是使用可绘制线

我在这里阅读过文章,但没有任何意义对我来说我是新手,代码看起来与我正在使用的代码完全不同

有人能指出我正确的方向吗?

非常感谢任何帮助

标记

1 个答案:

答案 0 :(得分:1)

是的,你当然可以这样做。我将尝试逐步向您解释该过程,

第1步

指向路径的File对象,例如

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

确保路径指向包含图像的目录

第2步

使用listFiles()方法列出目录中的所有文件,例如

File[] allImages = directory.listFiles();

现在你有一个像int[] mResources一样的所有文件的数组。唯一的区别是,现在你有实际的文件引用,而以前你有资源ID。

第3步

您可以像以前一样在ViewPager中显示图像。但这是一个有点棘手的,可能会花费大量的时间和代码来从File中正确显示图像。

您还需要处理缓存,以便在再次加载以前加载的图像时,它会从缓存中获取它。

要做到这一切,我建议您使用此库(由Google推荐),Glide

设置图像是一行代码,

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

那就是它。现在,您可以从设备中的目录在ViewPager中显示图像。