2015-01-28 3 views
1

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

После выполнения некоторых поиска в Интернете, я нашел много постов на StackOverflow, которые задавали тот же вопрос, и все они сказали, чтобы использовать этот код исправить их вопрос:

android:adjustViewBounds="true" 

и просто добавить это в их ImageView в xml. Я пробовал это, но прокладка остается. Я установил фоновый цвет изображения на зеленый, чтобы проиллюстрировать заполненные области.

Вот мой XML-код для карты:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:layout_margin="2dp" 
    android:clickable="true" 
    android:foreground="?android:attr/selectableItemBackground" 
    card_view:cardCornerRadius="5dp" 
    > 

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

     <ImageView 
      android:id="@+id/drinkImage" 
      android:layout_width="100dp" 
      android:layout_height="match_parent" 
      android:adjustViewBounds="true" 
      android:background="#00FF00" 
      android:gravity="left" 
      /> 

     <TextView 
      android:padding="8dp" 
      android:id="@+id/drinkName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="24sp" 
      android:layout_toRightOf="@+id/drinkImage" 
      /> 

     <TextView 
      android:padding="8dp" 
      android:id="@+id/drinkDesc" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/drinkName" 
      android:layout_toRightOf="@+id/drinkImage" 
      /> 

    </RelativeLayout> 
</android.support.v7.widget.CardView> 

и это то, что я получаю на моем экране:

http://i.stack.imgur.com/bVaR4.png

enter image description here

+1

Вы пытались сыграть с атрибутом 'android: scaleType' для вашего изображения? 'android: scaleType =" centerCrop "' может сделать трюк –

+0

Вы пробовали 'android: layout_width =" 100dp "и ' android: layout_height = "100dp" вместо 'match_parent'. И попробуйте удалить 'android: foreground' также? –

+0

Установка 'android: scaleType' на разные значения ничего не меняет, и ни одна из них не устанавливает ширину и высоту макета даже при значениях выше 100 дп. Я не совсем уверен, что делать с 'android: foreground' – mithunm93

ответ

0

ОК, оказалось, что я добавлял объект изображения в проект, кликнув правой кнопкой мыши и нажав new-> Image Asset. то, чего я не понимал, это действительно обрезание и изменение размера изображения, поскольку я, очевидно, не имел представления о правильном использовании создателя образа изображения.

Чтобы добавить файлы .PNG в проект, я просто скопировал файлы изображений из Finder (эквивалент Mac Windows Explorer) и вставил их в папку drawables в Android Studio, и все работает отлично. Такая ошибка noob!

2

зеленой «границы «не является границей, является фоном ImageView, установленным вами android:background="#00FF00". Над изображением ImageView. Соотношение изображений не соответствует ширине и высоте ImageView s, а ширина или высота изображения меньше, чем ширина или высота изображения ImageView. Поведение по умолчанию ImageView в этом случае заключается в центрировании изображения в ImageView. Поэтому вы видите пространство. Вы можете указать поведение, используя android:scaleType. См. official documentation. В противном случае вы можете отрегулировать ширину и высоту ImageView s в соответствии с изображением.

Обновление: ой извини, я не заметил, что вы используете CardView:

Согласно документации, это как задумано:

Из-за дороговизны округлых углу отсечения на платформах до L, CardView не обрезает своих детей, которые пересекаются с закругленными углами. Вместо этого он добавляет отступы, чтобы избежать такого пересечения (см. SetPreventCornerOverlap (boolean), чтобы изменить это поведение).

См. the CardView docs для получения дополнительной информации.

+0

Моя проблема в том, что я хочу, чтобы изображение заполнило весь ImageView, не должно быть дополнительной границы фона, отличной от изображения. Зеленый цвет был тем, что я нарисовал там, чтобы проиллюстрировать область, в которой я хочу быть заполнен изображением, то есть не осталось пустым. – mithunm93

+0

Изображение, которое я использую, очень большой, я не уверен, почему он уменьшает его, а затем намеренно добавляет границу вокруг него. – mithunm93

+0

Является ли соотношение сторон (ширина: высота) как «ImageView», так и вашего необработанного изображения тоже самое? Установите 'android: scaleType =" fitXY "' (заполняет ImageView полностью по ширине и высоте, но изображение будет растянуто, может показаться странным) или используйте 'android: scaleType =" centerCrop "' (изображение будет обрезано так, чтобы оно поместится в 'ImageView', но некоторые пиксели изображения не будут отображаться, поскольку они обрезаны (вырезаны), чтобы заполнить ширину и высоту ImageViews. – sockeqwe

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