删除 Glide 设置的图像并使用 imageView.setImageBitmap()
Remove image set by Glide and use imageView.setImageBitmap()
我有一个片段,首先使用 Glide 将图像设置为 imageView(图像 url 从互联网上获取)。然后单击图像视图,可以从图库或相机意图中选择一个新图像。问题是当我尝试设置从 OnActivityResult() 获得的位图时。图像实际设置但被滑行重叠。我需要显示从 camera/gallery 捕获的图像。感谢任何帮助,如果可以使用 Picasso 或任何其他库来完成,请提出建议。
以下是我到目前为止尝试过的方法
onActivityResult()
@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 缓存的问题不同
更新您的代码
编辑:
iv.logo.setBackground(null);
至:
iv.logo.setImageBitmap(null);
在花了很多时间弄清楚如何删除 Glide 设置的图像并失败后,决定走老路,先下载 phone 中的图像,然后在我的应用程序中将该图像设置为位图
下载图片的异步任务
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);
}
}
使用:
Glide.with(iv_logo.context)
.clear(iv_logo);
我有一个片段,首先使用 Glide 将图像设置为 imageView(图像 url 从互联网上获取)。然后单击图像视图,可以从图库或相机意图中选择一个新图像。问题是当我尝试设置从 OnActivityResult() 获得的位图时。图像实际设置但被滑行重叠。我需要显示从 camera/gallery 捕获的图像。感谢任何帮助,如果可以使用 Picasso 或任何其他库来完成,请提出建议。 以下是我到目前为止尝试过的方法
onActivityResult()
@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 缓存的问题不同
更新您的代码 编辑:
iv.logo.setBackground(null);
至:
iv.logo.setImageBitmap(null);
在花了很多时间弄清楚如何删除 Glide 设置的图像并失败后,决定走老路,先下载 phone 中的图像,然后在我的应用程序中将该图像设置为位图
下载图片的异步任务
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);
}
}
使用:
Glide.with(iv_logo.context)
.clear(iv_logo);