使用 glide 从 viewpager 中的 imageview 获取位图

Get bitmap from imageview in viewpager with glide

我在图像视图中显示滑行。用户可以在单击按钮时保存图像。

Bitmap bitmap = ((BitmapDrawable)imageViewPreview.getDrawable()).getBitmap();

当我使用此代码时,它会保存整个屏幕图像(图像和黑色 space)。

    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".

您可以从 DrawingCache 获取 Bitmap。在 ImageView 中设置图像后,您可以得到如下:

    imageViewPreview.setDrawingCacheEnabled(true);
    imageViewPreview.buildDrawingCache(true);
    final Bitmap bmp = Bitmap.createBitmap(layout.getDrawingCache());
    imageViewPreview.setDrawingCacheEnabled(false);

如果您需要全尺寸图像,那么我认为这不是正确的方法。更好的解决方案是从 Glide 获取它,如 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    
           }
        });
    }