2016-02-19 2 views
0

Я захват изображения с камеры и отправить его на сервер .Я отображения захваченного изображения на фоне 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 .WHILE настройки изображения в background относительной макете, изображение получил stretched.Screenshot приводится ниже:

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> 

Пожалуйста, помогите исправить issue.I я использую ширину, как match_parent и высоты, как 150dp для RelativeLayout.

+0

вместо того, чтобы устанавливать его в качестве фона, поместить его в изображение. –

+0

Я не могу использовать представление изображения, как вы можете видеть в относительной компоновке. Я использую стрелку, камеру, имя пользователя и его статус. Я вынужден к изображению в фоновом режиме. Вы можете угадать сложность прилагаемого скриншота. –

+0

вы можете установить их с помощью relativelayout –

ответ

0

Ваш RelativeLayout имеет стабильную ширину и высоту, но размер вашего изображения не подходит, поэтому он будет растягиваться.

Как вам нужно, relativelayout должно быть match_parent, но высота не должна быть стабильной, она будет скорректирована по вашему размеру изображения. Например, предположим, что размер вашего изображения равен ширине w и высоте h, тогда ваш relativelayout высота должна быть скорректирована с 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. Есть много подобных инструментов, как вы.

+0

Можете ли вы рассказать мне, как я могу проверить размер изображения? На самом деле моя проблема в том, что я захватываю изображение через камеру и отправляю его на сервер с помощью Multipart. Я получаю uri этого изображения и устанавливаю его на фоне относительного макет. Так что я не знаю высоту и ширину изображения заранее. –

+0

@ DeepakR, мой ответ был обновлен. – starkshang

+0

Как вы можете видеть, я вынужден установить изображение на фоне относительной компоновки. Релятивный макет позволяет отображать стрелку, имя, статус и т. Д. –

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, это будет способ может решить ваше растягивание изображения, я также использовал это в моем приложении, чтобы сделать изображение нормальным.

+0

Сначала просмотрите мою проблему. Я добавляю разные представления в Relative Layout. Поэтому я вынужден установить изображение на фоне относительной компоновки. Можно проверить экран выстрел. –

+0

@ DeepakR Быстрое исправление может заключаться в том, что вы создаете линейную компоновку только для изображения и ставите ее как верхний элемент родительского элемента Относительная компоновка, внутри этого линейного макета сделайте imageView и установите его масштаб, чтобы настроить изображение соответственно –

Смежные вопросы