首页 > 解决方案 > 使用滑行从 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"一样上升。

标签: androidandroid-imageview

解决方案


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

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

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

推荐阅读