无法从图像阵列列表中加载imageView

时间:2019-11-21 12:29:32

标签: java android android-resources android-imagebutton

在这里,我需要使用本地保存的.png文件动态加载图像按钮。从设备的内部存储中,我收集在特定文件夹中找到的图像。工作正常。

List<String> fileNames = new ArrayList<>();
        File folder = new File(Environment.getExternalStorageDirectory(), "Pictures/Screenshots");
        if (!folder.exists()) folder.mkdir();
        for (File file : folder.listFiles()) {
            String filename = file.getName().toLowerCase();
            if (filename.endsWith(".jpg") || filename.endsWith("jpeg") || filename.endsWith(".png")) {
                fileNames.add(filename);
            }
        }

将结果记录为

  

[123.png]

最后,我需要将图像按钮的背景设置为123.png图像。为此,我在循环中使用了

String picName = fileNames.get(i);
            String picName1 = picName.replace(".png", "");
            int resID = getResources().getIdentifier(picName1,"drawable","com.test.ABC");
            imageView.setImageResource(resID);

那时候我遇到了这个错误

  

11-21 17:54:48.899 27250-27250 / com.datamation.swdsfa W / ResourceType:   获取资源编号的值时没有包标识符   0x0000007b 11-21 17:54:48.904 27250-27250 / com.datamation.swdsfa   W / ImageView:无法找到资源:123       android.content.res.Resources $ NotFoundException:资源ID#0x7b           在android.content.res.Resources.getValue(Resources.java:2350)           在android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:330)           在android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:433)           在android.support.v7.widget.VectorEnabledTintResources.getDrawable(VectorEnabledTintResources.java:67)           在android.widget.ImageView.resolveUri(ImageView.java:648)           在android.widget.ImageView.setImageResource(ImageView.java:377)           在com.test.ABC.fragment.FragmentTools.ViewImageList(FragmentTools.java:342)           在com.test.ABC.fragment.FragmentTools.onClick(FragmentTools.java:287)           在android.view.View.performClick(View.java:4640)           在android.view.View $ PerformClick.run(View.java:19421)           在android.os.Handler.handleCallback(Handler.java:733)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:146)           在android.app.ActivityThread.main(ActivityThread.java:5602)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)           在dalvik.system.NativeStart.main(本机方法)

谢谢。

3 个答案:

答案 0 :(得分:1)

您正在使用imageView.setImageResource(resID);的方法来处理drawable文件夹中的图像,但是正如您所说的,From internal storage of the device I collect the images found on particular folder.似乎是您试图使用存储在内部目录中的图像存储。这样就行不通了。

Check this

您可以尝试这样的事情,

File file = new File("some path");
if(file.exists()){
    Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
    imageView.setImageBitmap(myBitmap);
}

要获取默认相机目录的路径,您可以尝试

File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(picDir, "your image.png");

答案 1 :(得分:0)

嗨,您可以使用Picasso或Glide轻松完成此操作

我以使用毕加索为例。

File file = new File(filepath);
Picasso.with(activity).load(file).fit().centerCrop().into(image);

答案 2 :(得分:0)

您需要更改一点代码

List<String> fileNames = new ArrayList<>();
    File folder = new File(Environment.getExternalStorageDirectory(), "Pictures/Screenshots");
    if (!folder.exists()) folder.mkdir();
    for (File file : folder.listFiles()) {
        String filename = file.getName().toLowerCase();
        if (filename.endsWith(".jpg") || filename.endsWith("jpeg") || filename.endsWith(".png")) {
            fileNames.add(Environment.getExternalStorageDirectory() + "Pictures/Screenshots/"  +filename);
        }
    }

您可以仅使用Picasso库将图像放入Image-Button

例如

  

Picasso.get()。load(filename).into(yourImageButton);

为此,您需要将库添加到gradle中

  

实现'com.squareup.picasso:picasso:2.5.2'

作为参考,您可以使用此链接Picasso

相关问题