android - 使用滑行从 viewpager 中的 imageview 获取位图
问题描述
我正在用滑行显示在 imageview 中。用户可以在按钮单击时保存图像。
Bitmap bitmap = ((BitmapDrawable)imageViewPreview.getDrawable()).getBitmap();
当我使用此代码时,它会保存整个屏幕图像(图像和黑色空间)。
imageViewPreview.setDrawingCacheEnabled(true);
imageViewPreview.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
imageViewPreview.layout(0, 0,
imageViewPreview.getMeasuredWidth(), imageViewPreview.getMeasuredHeight());
imageViewPreview.buildDrawingCache(true);
Bitmap bitmap = Bitmap.createBitmap(imageViewPreview.getDrawingCache());
imageViewPreview.setDrawingCacheEnabled(false);
什么时候使用它,有时它会起作用,但图像会被裁剪成两半,或者图像会像"android:layout_alignParentTop="true"一样上升。
解决方案
您可以Bitmap
从 DrawingCache 中获取。在设置图像后,ImageView
您可以得到它,如下所示:
imageViewPreview.setDrawingCacheEnabled(true);
imageViewPreview.buildDrawingCache(true);
final Bitmap bmp = Bitmap.createBitmap(layout.getDrawingCache());
imageViewPreview.setDrawingCacheEnabled(false);
如果您需要全尺寸图像,那么我认为这不是正确的方法。更好的解决方案是从Glide
as获取它Bitmap
。如果已经加载了完整图像,它将很快(从缓存中),否则它将从服务器加载完整图像,或者您仍然可以Drawing cache
在没有互联网连接和滑行失败的情况下使用。
Glide.with(imageView.getContext())
.asBitmap()
.load("imageUrl")
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
// Use resource here
}
});
}
推荐阅读
- metpy - Metpy 横截面测地线
- r - 使用 r 中的 for 循环对列表中的每个数据帧按升序对两列进行排序
- sql - 从 SQL Server 查询中获取对象架构名称
- c# - C# - 使用 Selenium 获取渲染的 html 代码
- javascript - 如何从带有嵌入式div VUE 3的按钮中获取类
- google-cloud-run - 可以使用 Google Cloud Run 运行持续侦听的 Python 脚本吗?
- javascript - 节点JS | 在服务器中使用两个协议
- vba - 如果字段在继承标记树中很深,如何检查字段是否为空或存在。(SSRS 报告)
- java - Jackson ObjectMapper 反序列化包含对象数组的对象
- reactjs - 如何在 useState 上设置输入和下拉列表的值?