以编程方式设置ImageView导致失真

时间:2017-09-22 17:00:27

标签: android android-imageview image-scaling

我正在为从远程服务器下载的文件设置ImageView,然后保存到设备的本地存储中。由于某种原因,图像变得扭曲。根据我的研究,如果我设置了scaleType的{​​{1}},adjustViewBoundsmaxWidthmaxHeight属性,那么Android会为我缩放图像。这看起来很奇怪,因为在我的另一个非Android开发中,我总是必须在显示之前先以编程方式调整图像大小。但是,this post表示Android会这样做。

这是我要显示的图片:Image

图片扭曲:

enter image description here

代码:

ImageView

1 个答案:

答案 0 :(得分:0)

如果它对任何人都有帮助,我最终会使用以下代码调整图像大小:

            final URLConnection ucon = new URL(url).openConnection();
            final InputStream is = ucon.getInputStream();
            final Bitmap b = BitmapFactory.decodeStream(is);

            int origWidth = b.getWidth();
            int origHeight = b.getHeight();
            float scaleWidth = ((float) width) / origWidth;
            float scaleHeight = ((float) width) / origHeight;

            final Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);

            Bitmap b2 = Bitmap.createBitmap(b, 0, 0, origWidth, origHeight, matrix, false);

            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            b2.compress(Bitmap.CompressFormat.PNG, 100, outStream);

            FileOutputStream fo = new FileOutputStream(file);
            fo.write(outStream.toByteArray());
            fo.flush();
            fo.close();
            outStream.flush();
            outStream.close();
            b.recycle();
            b2.recycle();