Android应用中的图片大小调整

时间:2015-08-22 11:25:52

标签: android android-layout android-activity

我有从不同相机拍摄的图像,具有差异分辨率并且具有差异尺寸。

现在我必须在图像视图中显示这些图像。现在,如果我将图像视图的大小固定为300dp 300dp,图像会被压缩并看起来变形。

同时如果将内容包装到内容中,则尺寸会有所不同。

什么是最好的方法?

4 个答案:

答案 0 :(得分:1)

使用其中一个图片加载库:Glide,Square PicassoUILIon(Ion实际上更像是一种通用的异步加载工具)肮脏的工作给你。所有这些方法都可以在加载时使图像适合所需的大小。

使用vanilla代码,您可能需要设置android:scaleType="centerCrop"android:scaleType="centerInside",具体取决于您是分别要求“从内部触摸”还是“适合所有”行为。

答案 1 :(得分:0)

这是我通常用来调整位图大小的地方:

public Bitmap decodeSampledBitmap(File res, int reqWidth, int reqHeight) {
    if (res != null) {
        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        try {
            FileInputStream stream2 = new FileInputStream(res);

            BitmapFactory.decodeStream(stream2, null, options);

            stream2.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Calculate inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        o2.inJustDecodeBounds = false;
        FileInputStream stream = null;
        try {
            stream = new FileInputStream(res);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeStream(stream, null, o2);
        try {
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    } else
        return null;
}

public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

答案 2 :(得分:0)

Try this code give height and width according to your requirement.

BitmapFactory.Options bitopt = new BitmapFactory.Options();
    bitopt.inJustDecodeBounds = true;
    Bitmap bit = BitmapFactory.decodeFile(file, bitopt);

    int h = (int) Math.ceil(bitopt.outHeight / (float) height);
    int w = (int) Math.ceil(bitopt.outWidth / (float) width);

    if (h > 1 || w > 1) {
        if (h > w) {
            bitopt.inSampleSize = h;

        } else {
            bitopt.inSampleSize = w;
        }
    }
    bitopt.inJustDecodeBounds = false;
    bit = BitmapFactory.decodeFile(file, bitopt);
    return bit;
}

In XML set height width to imageview and set scaletype to fitXY

答案 3 :(得分:0)

在ImageView中,根据需要更改宽度和高度,使缩放类型适合x(宽度)和y(高度)。这会将图像拉伸到您定义的宽度和高度:

<ImageView
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:id="@+id/imageView"
    android:src="@drawable/my_image"
    android:scaleType="fitXY" /> <!-- Add this -->

如果您是以编程方式执行此操作,请执行以下操作:

imageView.setImageResource(R.drawable.my_image);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);

如果您不想使用fitXY,请查看此内容:http://etcodehome.blogspot.com/2011/05/android-imageview-scaletype-samples.html

如果您不希望图片被拉伸,可能需要使用centerInside,并根据您的需要更改图片的高度和宽度。