伙计我使用以下自定义代码从资源加载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数组中。我可以得到路径,但不知道代码应该采用什么格式,而不是使用可绘制线
我在这里阅读过文章,但没有任何意义对我来说我是新手,代码看起来与我正在使用的代码完全不同
有人能指出我正确的方向吗?
非常感谢任何帮助
标记
答案 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中显示图像。