2017-02-20 4 views
0

Привет У меня есть ImageView, который отображает изображение с URL-адреса. Изображения разных размеров. Они могут быть квадратной или портретной формы или в форме ландшафта. Мне нужно установить размер изображения соответственно, без растягивания или обрезки.Android изменение размера изображения динамически по размеру изображения

Скажите, если размер изображения равен 512x512, тогда ImageView должен быть в квадратной форме и выровнен по центру экрана.

Если размер изображения примерно равен 1024x800, тогда размер ImageView должен быть в форме горизонтального прямоугольника и выровненном центре экрана.

Во всех случаях ширина должна соответствовать родительскому, но высота должна соответственно регулироваться. Как я могу это сделать?

Ниже в моем xml-коде.

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <android.support.v7.widget.CardView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:maxHeight="400dp" 
     android:maxWidth="300dp" 
     android:layout_margin="10dp" 
     app:cardBackgroundColor="@color/white"> 
     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <android.support.v4.widget.NestedScrollView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:scrollbars="none"> 
       <ImageView 
        android:id="@+id/image" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:adjustViewBounds="true" 
        android:scaleType="fitXY" 
        android:minWidth="260dp" 
        tools:ignore="ContentDescription" /> 
      </android.support.v4.widget.NestedScrollView> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@color/grey_light" /> 

      <TextView 
       android:id="@+id/title" 
       android:layout_width="match_parent" 
       android:layout_height="35dp" 
       android:layout_gravity="right" 
       android:layout_margin="@dimen/space_small_low" 
       android:background="@drawable/transparent_bg" 
       android:textColor="@color/orange" /> 
     </LinearLayout> 
    </android.support.v7.widget.CardView> 
</FrameLayout> 
+0

удалить андроид: scaleType = "fitXY" из XML и рассчитать высоту изображения, соотношение сторон, как (deviceheight * ImageWidth)/devicewidth – user3040153

+0

Удаление создает пустое пространство в ImageView. –

ответ

1

множество ширина ImageView к match_parent в XML и рассчитать высоту изображения во время выполнения, чтобы сохранить пропорции, используя код ниже:

Display display = getActivity().getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int newWidth = size.x; 

//Get actual width and height of image 
int width = bitmap.getWidth(); 
int height = bitmap.getHeight(); 

// Calculate the ratio between height and width of Original Image 
float ratio = (float) height/(float) width; 
float scale = getApplicationContext().getResources().getDisplayMetrics().density; 
int newHeight = (int) (width * ratio)/scale; 

Pass этот newHeight и newWidth к измените размер изображения, вызвав функцию .resize вашей библиотеки обработки изображений.

+0

Спасибо @nnn. Это сработало. –

0

изменения android:scaleType="fitXY" в android:scaleType="centerInside"

и установить ImageView ширину по ширине экрана, означает, что вы должны рассчитать ширину для ImageView на 60 процентах от ширины экрана или что-то подобное и использовать android:scaleType="centerInside" можете вычислить высоту себя без изменения соотношения сторон изображения.

0

Jsut положить wrap_content он автоматически примет размер. андроид: layout_height = "wrap_cont`enter код here`ent" />

+0

Пожалуйста, прочитайте полный вопрос. Он хочет, чтобы ширина изображения всегда была match_parent. – nnn

0

Слышал Picasso библиотеки? Это не просто центр обрезать изображение, но он управляет сложностью кэширования для вас.

Как настроить? Добавьте эту зависимость в свою Gradle и синхронизацию.

compile 'com.squareup.picasso:picasso:2.5.2' 

Как пользоваться библиотекой? Просто, вам просто нужно вызвать одноэлементный код.

ImageView imageView = .... 
Picasso.with(contextHere()) 
     .load("http://example.com/myimage.jpg) 
     .fit() 
     .centerCrop() 
     .into(imageView); 
Смежные вопросы