在安卓上使用Fresco库显示SD卡中的图片

3
我可以使用Fresco图片库显示来自URL的图片,就像他们网站上展示的一样 -
Uri u = Uri.parse("https://assets-cdn.github.com/images/modules/logos_page/GitHub-Mark.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(u);

如何使用Fresco从SD卡显示图片?
5个回答

9
获取设备上的文件
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
Uri imageUri= Uri.fromFile(new File(imagePath));// For files on device
draweeView.setImageURI(imageUri);

获取网络上的文件

Uri imageUri = Uri.parse(imagePath);
ImageRequest request = ImageRequest.fromUri(imageUri);
DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(draweeView.getController()).build();
draweeView.setController(controller);

有没有办法在XML本身中添加fileUri和networkurl?@eftekhari - Vikas Pandey
@VikasPandey 或许将数据保存在“SharedPreferences”中是一个可行的方法。https://dev59.com/E2w05IYBdhLWcg3wkig- - Eftekhari

2
就像这样
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);

draweeView.setImageURI(getImageContentUri(context.filepath));

/**
 * Gets the content:// URI  from the given corresponding path to a file
 *
 * @param context
 * @param imageFile
 * @return content Uri
 */
public static Uri getImageContentUri(Context context, java.io.File imageFile) {
    String filePath = imageFile.getAbsolutePath();
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[]{MediaStore.Images.Media._ID},
            MediaStore.Images.Media.DATA + "=? ",
            new String[]{filePath}, null);
    if (cursor != null && cursor.moveToFirst()) {
        int id = cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID));
        Uri baseUri = Uri.parse("content://media/external/images/media");
        return Uri.withAppendedPath(baseUri, "" + id);
    } else {
        if (imageFile.exists()) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, filePath);
            return context.getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            return null;
        }
    }
}

然而,您可能会遇到这个问题:

如何在fresco SimpleDraweeView中更新图像,如果它曾经被setImageURI设置过


1

如果您正在使用下面给出的Fresco示例从SD卡或图库在RecyclerView中显示图片。

     Uri imageUri = Uri.parse("file://"+galleryList.get(position));

    ImageRequest request = ImageRequest.fromUri(imageUri);

    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setImageRequest(request)
            .setOldController(holder.simpleDraweeViewOne.getController()).build();
    Log.e(TAG, "ImagePath uri " + imageUri);

    holder.simpleDraweeViewOne.setController(controller);

注意:用file://来显示来自sdcard的数据。

1

0

您只需要使用res:/ URI 方案,后跟您的资源 ID,就像这样:

Uri localImageUri = Uri.parse("res:/" + R.drawable.your_sdcard_image);

simpleDraweeView.setImageURI(localImageUri);

这里是Fresco支持的URI


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接