位图的文件夹到可绘制的int数组,以便在RecyclerView中显示

时间:2016-01-05 02:52:07

标签: java android arrays bitmap android-recyclerview

我有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));
}

感谢您的帮助。

1 个答案:

答案 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

其他步骤需要您了解如何使用CardViewRecyclerView。您可以在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 linkImageView的更多信息。