如何在android中填充图像全屏

时间:2015-03-07 07:22:28

标签: android android-layout android-camera

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageview"
        android:scaleType="centerCrop"/>
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/imagecancel"
        android:layout_marginBottom="10dp"
        android:background="#80000000">
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/imagecaption"
        android:hint="Enter a description"
        android:textColorHint="#80ffffff"
        android:textColor="#ffffff"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"/>
    </RelativeLayout>
    <ImageButton
        android:contentDescription="@string/imagecancel"
        android:id="@+id/imagecancel"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        android:scaleType="fitStart"
        android:background="@android:color/transparent"
        android:src="@drawable/cancel"/>
    <ImageButton
        android:contentDescription="@string/imagesave"
        android:id="@+id/imagesave"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp"
        android:scaleType="fitEnd"
        android:background="@android:color/transparent"
        android:src="@drawable/ok"/>

</RelativeLayout>

爪哇

private void previewCapturedImage() {



        try {

            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 1;
            ExifInterface exif = null;
            int orientation = 0;//Since API Level 5
            try {
                exif = new ExifInterface(fileUri.getPath());
                orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            } catch (IOException e) {
                e.printStackTrace();
            }
            String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);

            Log.i("file path",exifOrientation);

            final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath());

            previewimage.setImageBitmap(bitmap);
            switch(orientation) {

                case ExifInterface.ORIENTATION_ROTATE_270:
                    Log.i("RotateBitmap","270");
                    RotateBitmap(bitmap, 270);
                    previewimage.setRotation(270);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    Log.i("RotateBitmap","90");
                    RotateBitmap(bitmap, 90);
                    previewimage.setRotation(90);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    Log.i("RotateBitmap","180");
                    RotateBitmap(bitmap, 180);
                    previewimage.setRotation(180);
                    break;
            }







        } catch (NullPointerException e) {
            e.printStackTrace();
        }

    }

    public static Bitmap RotateBitmap(Bitmap source, float angle)
    {
        Matrix matrix = new Matrix();
        matrix.postRotate(angle);
        previewimage.setImageBitmap(source);
        return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
    }

此处图片在小屏幕手机中正常填充。但在大屏幕手机图像中没有正确显示。它显示距离顶部2厘米和距离底部2厘米的间隙。图像来自手机摄像头拍照。我想全屏填写图片。如何解决这个问题。

screenshot

4 个答案:

答案 0 :(得分:1)

试试这个

<ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageview"
        android:scaleType="fitXY"/>

答案 1 :(得分:1)

问题的根源是当前预览区域的侧面比率与您获得的图片的侧面比率之间的差异。您的预览区域在不同的设备上会有所不同(即使在不同方向的同一台设备上 - 由软键和位置引起),您从相机获得的图像与您当前的图像边缘比率很少预习。

您的问题无需任何代码即可解答。只需在一张纸上画一个矩形(非正方形)和一个正方形,然后尝试将它们装入另一个。

矩形(宽或高)代表你的手机,方块代表你从相机获得的图片(它大部分都不是正方形,但我在这里使用正方形使其更清楚地证明)。

如果你采用这两种形状并尝试“适合”。一个到另一个,你将最终得到3种不同的场景:

  1. 你设法通过拉伸/挤压将方形放入矩形。这绝对不是拍摄的结果(首先,它不再是正方形,第二,我们的奶奶的脸太胖或太瘦了: - )
  2. 你将整个正方形放入你的矩形中,你会看到2个未填充区域(如果你居中) - 这就是你所抱怨的情况。也被称为“适合”&#39;或&#39; letterbox&#39;;
  3. 用正方形的一部分填充整个矩形,正方形的两边将溢出矩形。如果您不记得丢失了部分图片,此案例似乎已经实现了您的目标。情况有时会被称为“扫描&#39;。
  4. 。”

    那么,这个咆哮对你有什么帮助?如果您坚持填满整个屏幕(并且丢失溢出的图像部分),则在获得图像后调整SurfaceView区域,使用它的宽度/高度来计算比率。

    如果你真的坚持看到一些代码,it's done here(请参阅setLayoutParams),但要注意,我指向的示例更复杂,涉及自定义相机处理。但总的想法是一样的。

    祝你好运

答案 2 :(得分:0)

如果需要,可以在xml中将其设置为RelativeLayout背景。

android:background="@drawable/_image"

或将其设为dynamically

答案 3 :(得分:0)

更改scaletype

   <ImageView
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:id="@+id/imageview"
 android:scaleType="fitXY"/>