我正在从相机捕捉图像并将其发送到服务器。我使用以下代码在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
中设置图像时,图像得到了拉伸。屏幕截图如下:
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。
答案 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,它可以解决您的图像拉伸问题,我也在我的应用程序中使用它来使图像正常。