我有RecyclerView
我在其中显示Drawable
的整数数组。不过我在sd卡上有一个Bitmaps文件夹,而不是我要显示的。但是我无法弄清楚如何将位图转换为drawable并将它们放入一个int数组中进行显示,即使这是解决这个问题的最佳方法。
这是我在onCreateView中设置我的适配器的代码,我使用getData()
为适配器提供图像:
adapter = new ProgressImagesListAdapter(getActivity(), getData());
mProgressImagesListRecycler.setAdapter(adapter);
这是getData():
public List<ProgressImagesListInformation> getData() {
List<ProgressImagesListInformation> mFrontViewImagesList = new ArrayList<>();
int[] mImages = new int[]{
R.drawable.boomer,
R.drawable.bosco,
R.drawable.brewster,
R.drawable.dory,
R.drawable.gabby,
R.drawable.hunter,
R.drawable.kitkat,
R.drawable.doug,
R.drawable.mae,
R.drawable.millie
};
for (int i = 0; i < mImages.length; i++)
{
ProgressImagesListInformation current = new ProgressImagesListInformation();
current.mImageId = mImages[i];
mFrontViewImagesList.add(current);
}
return mFrontViewImagesList;
}
我的想法是更改getdata()的内容,制作一个for循环,将sd卡文件夹位图的内容转换为drawables数组,使用类似于for循环中下面的行,但我还没有能够以一种方式实现它。这显然给我发现错误类型位图预期类型整数,但我不明白为什么或如何解决它。
ArrayList<Integer> ImagesArray = new ArrayList<>();
for (int i = 0; i < sNumberOfFilesInImageDirectory; i++)
{
ImagesArray.add(new BitmapDrawable(getResources(), MyBitmapImage));
}
感谢您的帮助。
答案 0 :(得分:3)
您必须知道SD卡上这些图像的位置。它们总是在同一个文件夹中吗?如果是这样,那对你来说会更容易。
首先,不要忘记在android.permission.READ_EXTERNAL_STORAGE
文件上声明AndroidManifest.xml
。
然后,您需要使用BitmapFactory
以及图片的路径来获取Bitmap
个对象,并将它们放入List
ArrayList
中或者只是使用一个数组。
之后,您可以像其他任何一样使用图像。但他们不会成为int
资源,他们将成为真正的Bitmap
个对象。要使用R.drawable.someimage
等资源,他们必须位于res/
文件夹下。
示例:
BitmapFactory.Options opt= new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, opt);
list.add(bitmap); // Or do something else with the Bitmaps.
如果您想将这些图像保存在其他位置,请检查this answer。
其他步骤需要您了解如何使用CardView
和RecyclerView
。您可以在Android Essence上阅读this post,在Big Nerd Ranch上阅读this one,当然还可以从Android培训指南中阅读this one以便开始使用。
**编辑:**并在Bitmap
上使用ImageView
,请使用:
Bitmap yourBitmap; // Getting from somewhere else.
ImageView myImage = (ImageView) findViewById(R.id.myimageview);
myImage.setImageBitmap(yourBitmap);
如果由于某种原因你有一个Drawable
对象而不是Bitmap
,你可以致电:
Drawable yourDrawable; // Getting from somewhere else.
ImageView myImage = (ImageView) findViewById(R.id.myimageview);
myImage.setImageDrawable(yourDrawable);
关于this link的ImageView
的更多信息。