在相对布局中设置为背景时图像被拉伸

时间:2016-02-19 13:09:52

标签: android image relativelayout

我正在从相机捕捉图像并将其发送到服务器。我使用以下代码在RelativeLayout的背景中显示捕获的图像:

private void previewMedia(boolean isImage) {
    // Checking whether captured media is image or video
    if (isImage) {
        Log.e("Preview Media", "Called");
        BitmapFactory.Options options = new BitmapFactory.Options();

        // down sizing image as it throws OutOfMemory Exception for larger images
        options.inSampleSize = 8;
        //options.inScaled = false;

        Log.e("File URI", String.valueOf(fileUri));

        final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), options);
        //Uploading image to server
        new UploadFileToServer().execute();
        Log.e("DownSizing image", "Called");
        Drawable dr = new BitmapDrawable(bitmap);
        Log.e("DrawableN", String.valueOf(dr));
        relativeLayout.setBackgroundDrawable(dr);
    }
}

在代码中,我正在缩小图像尺寸以避免OutOfMemory Exception。在相对布局的background中设置图像时,图像得到了拉伸。屏幕截图如下:

Stretched Image

XML代码:

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/padding10">

    <RelativeLayout
        android:id="@+id/rel"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:layout_marginBottom="@dimen/margin10"
        android:layout_marginLeft="@dimen/margin10"
        android:layout_marginRight="@dimen/margin10"
        android:layout_marginTop="@dimen/margin10">

        <ImageView
            android:id="@+id/arrowProfile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:paddingLeft="@dimen/padding10"
            android:src="@drawable/back_signup" />

        <com.almabay.almachat.circularImageView.CircularImageView
            android:id="@+id/cam"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentRight="true"
            android:paddingRight="@dimen/padding10"
            android:background="@drawable/camera1"/>

        <TextView
            android:id="@+id/userName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/status"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="@dimen/margin20"
            android:paddingLeft="@dimen/padding10"
            android:text="User Name"
            android:textColor="#ffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:paddingLeft="@dimen/padding10"
            android:text="Status of user"
            android:textColor="#ffffff" />
    </RelativeLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/rel"
        android:background="@color/divider_background">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:layout_marginRight="@dimen/margin10"
            android:layout_marginTop="@dimen/margin10"
            android:background="@color/divider_background"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="@dimen/margin10"
                android:background="#ffffff"
                android:orientation="vertical"
                android:paddingLeft="@dimen/padding10">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="First Name"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/firstNameProfile"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Ashish" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/divider_height"
                    android:layout_marginBottom="@dimen/margin10"
                    android:layout_marginTop="@dimen/margin10"
                    android:background="@color/divider_background" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Last Name"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/lastNameProfile"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Kumar" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/divider_height"
                    android:layout_marginBottom="@dimen/margin10"
                    android:layout_marginTop="@dimen/margin10"
                    android:background="@color/divider_background" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Birthday"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/birthday"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="03 December" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="2dp"
                    android:layout_marginBottom="@dimen/margin10"
                    android:layout_marginTop="@dimen/margin10"
                    android:background="@color/divider_background" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Gender"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/gender"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingBottom="@dimen/padding10"
                    android:text="Female" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="@dimen/margin10"
                android:background="@color/while_color"
                android:orientation="vertical"
                android:paddingLeft="@dimen/padding10">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:paddingTop="@dimen/padding10"
                        android:text="Status"
                        android:textStyle="bold" />

                    <ImageView
                        android:id="@+id/imgEdit"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true" />
                </RelativeLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/divider_height"
                    android:layout_marginBottom="@dimen/margin10"
                    android:layout_marginTop="@dimen/margin10"
                    android:background="@color/divider_background" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingBottom="@dimen/padding10"
                    android:text="Displaying the status message here" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="@dimen/margin10"
                android:background="@color/while_color"
                android:orientation="vertical"
                android:paddingLeft="@dimen/padding10">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:text="Email"
                        android:textStyle="bold" />

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true" />
                </RelativeLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/divider_height"
                    android:layout_marginBottom="@dimen/margin10"
                    android:layout_marginTop="@dimen/margin10"
                    android:background="@color/divider_background" />


                <TextView
                    android:id="@+id/emailProfile"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingBottom="@dimen/padding10"
                    android:text="Email ID" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="@dimen/margin10"
                android:background="@color/while_color"
                android:orientation="vertical"
                android:paddingLeft="@dimen/padding10">

                <RelativeLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingTop="@dimen/padding10">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:text="Phone"
                        android:textStyle="bold" />

                    <ImageView
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_alignParentRight="true" />
                </RelativeLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/divider_height"
                    android:layout_marginBottom="@dimen/margin10"
                    android:background="@color/divider_background" />

                <TextView
                    android:id="@+id/mobile"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingBottom="@dimen/padding10"
                    android:text="13464646466" />

            </LinearLayout>

        </LinearLayout>
    </ScrollView>


</RelativeLayout>

请帮助解决问题。对于RelativeLayout,我使用的宽度为match_parent,高度为150dp。

2 个答案:

答案 0 :(得分:0)

您的RelativeLayout具有稳定的宽度和高度,但您的图像尺寸不合适,因此会拉伸。

根据需要,relativelayout应该是match_parent,但是高度不应该是稳定的,它将根据你的图像大小进行调整。例如,假设你的图像大小是w宽度和h高度,那么你的相对布局高度应调整为screenwidth/width*h.

首先,你可以像这样获得图像的宽度和高度:

final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), options);
int w = bitmap.getWidth();
int h = bitmap.getHeight();

然后通过以下方式获取screenwidth:

int screen_width = getResources().getDisplayMetrics().widthPixels;

然后计算比例值:

float scaleX = (float) screen_width / w;

然后计算布局高度:

float height = scaleX * h;

最后设置我们得到的身高值为relativelayout的身高:

android.view.ViewGroup.LayoutParams params = relativeLayout.getLayoutParams();
params.height = height;
relativeLayout.setLayoutParams(params);

然后将图像设置为背景:

relativeLayout.setBackgroundDrawable(dr);

mygithub中有一个例子。它有很多像你一样的类似工具。

答案 1 :(得分:0)

试试这个

<ImageView
     android:id="@+id/abc"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:contentDescription="image for user"
     android:scaleType="fitCenter"
     android:src="@drawable/ur_img" >
</ImageView>

将比例类型设置为fitCenter,它可以解决您的图像拉伸问题,我也在我的应用程序中使用它来使图像正常。