移除Glide设置的图片并使用imageView.setImageBitmap()方法

8
我有一个片段,最初使用Glide将图像设置为imageView(从互联网获取图像URL)。然后,在单击imageView时,可以从相册或相机意图中选择新图像。问题是当我尝试使用OnActivityResult()获得的位图来设置图像时。实际上设置了图像,但被Glide覆盖了。我需要显示从相机/相册拍摄的图像。任何帮助都将不胜感激,如果可以使用Picasso或任何其他库完成,请建议。
以下是我目前尝试过的:
 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK)
    {
        if (requestCode == SELECT_FILE)
            onSelectFromGalleryResult(data);
        else if (requestCode == REQUEST_CAMERA)
            //   onCaptureImageResult((Bitmap) data.getExtras().get("data"));
            onCaptureImageResult(data);
    }
}

private void onCaptureImageResult(Intent data)
{
    if (data != null)
    {
        mImageUri = Uri.parse("file://" + data.getStringExtra(CameraConfiguration.Arguments.FILE_PATH));
    }

    try
    {
        bitmap_image = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), mImageUri);
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap_image.compress(Bitmap.CompressFormat.JPEG, 60, bytes);

        bitmap_image = Bitmap.createScaledBitmap(bitmap_image, (int) (bitmap_image.getWidth() * 0.5), (int) (bitmap_image.getHeight() * 0.5), true);

        ExifInterface ei = new ExifInterface(data.getStringExtra(CameraConfiguration.Arguments.FILE_PATH));
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

        switch (orientation)
        {
            case ExifInterface.ORIENTATION_ROTATE_90:
                bitmap_image = (SnappyUtils.rotateImage(bitmap_image, 90));
                break;

            case ExifInterface.ORIENTATION_ROTATE_180:
                bitmap_image = (SnappyUtils.rotateImage(bitmap_image, 180));
                break;

            case ExifInterface.ORIENTATION_ROTATE_270:
                bitmap_image = (SnappyUtils.rotateImage(bitmap_image, 270));
                break;

            case ExifInterface.ORIENTATION_NORMAL:

            default:
                break;
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
        Log.d("exception", e.toString());
    }
    ////////////////////// it is showing on iv_logo2 as expected as it does not has anything set by glide//////////////////////////////////////////////////////////////////
    iv_logo.setBackground(null);
    iv_logo.setImageBitmap(bitmap_image);
    iv_logo2.setImageBitmap(bitmap_image);

    ///////////////////////////tried added this by seeing other SO posts //////////////////////////////////////////////////////////////////
    Glide.with(mContext)
            .load(mImageUri)
            .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .skipMemoryCache(true)
            .into(iv_logo);
}

此外,请注意,这与删除Glide缓存的问题不同。
3个回答

12

使用:

Glide.with(iv_logo.context)
    .clear(iv_logo);

1
虽然这可能回答了作者的问题,但它缺少一些解释性的单词和/或文档链接。裸代码片段没有一些附带的短语是不太有用的。您还可能发现如何编写一个好答案非常有帮助。 - Morse
实际上,我认为这非常聪明。这个答案正好回答了问题所要求的内容。 - Thiago Silva

0

更新你的代码 编辑:

iv.logo.setBackground(null);

to:

iv.logo.setImageBitmap(null);

1
无法工作,你知道如何删除 Glide 设置的图像吗? - Nilabja

0

在花费了很多时间试图删除 Glide 设置的图像并失败后,我决定采用老派方法,先在手机上下载图像,然后将该图像作为位图设置在我的应用程序中

使用 asynchtask 下载图像

private class GetImages extends AsyncTask<Object, Object, Object>
{
    private String requestUrl, imagename_;
    private ImageView view;
    private Bitmap bitmap;
    private FileOutputStream fos;

    private GetImages(String requestUrl, ImageView view, String _imagename_)
    {
        this.requestUrl = requestUrl;
        this.view = view;
        this.imagename_ = _imagename_;
    }

    @Override
    protected Object doInBackground(Object... objects)
    {
        try
        {
            URL url = new URL(requestUrl);
            URLConnection conn = url.openConnection();
            bitmap = BitmapFactory.decodeStream(conn.getInputStream());
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Object o)
    {
        view.setImageBitmap(bitmap);
    }
}

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