да .. это похоже на границу. Но когда вы используете рисованное изображение с прозрачным фоном, оно не будет отображаться с рамкой. он показывает черный цвет, где у вас есть прозрачный. Таким образом, ваш ответ не лучший подход.
Правин
19
Да! но у вас есть границы без создания другого XML-файла.
user609239
7
Это не работает, когда вы изменяете размер изображения с помощью android:scaleType="centerCrop".
Silox
8
это плохо, потому что создает ненужный оверлей
Джей Сойер,
1
@ Silox для scaleType="centerCrop", не забудьте также добавитьcropToPadding="true"
Адам Джонс
24
Это старый пост, который я знаю, но я подумал, что это может кому-то помочь.
Если вы хотите смоделировать полупрозрачную границу, которая не перекрывает «сплошной» цвет фигуры, используйте это в своем XML. Обратите внимание, что я здесь вообще не использую тег «штрих», так как кажется, что он всегда перекрывает фактическую нарисованную форму.
Мне это тоже нравится, но если вы сделаете внешние края слишком маленькими, углы будут пустыми. Это работает хорошо с чем-нибудь 2dp и выше.
Джон Стэк,
Преимущество этого метода в том, что он допускает закругленные углы. Если вы не хотите, чтобы граница предыдущего ответа перекрывалась, добавьте отступ к тегу ImageView. Недостаток этого метода в том, что при использовании полупрозрачного фона граница будет сливаться с областью изображения. Поэтому я выбираю предыдущий метод, потому что мне нравится прозрачный фон лучше, чем закругленные углы.
только примечание об этом, если изображение устанавливается динамически, тогда границу необходимо установить заново в коде, иначе изображение находится за границей.
Rob85
4
Создать границу
Создайте XML-файл (например, «frame_image_view.xml») со следующим содержимым в папке для рисования:
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"><strokeandroid:width="@dimen/borderThickness"android:color="@color/borderColor"/><paddingandroid:bottom="@dimen/borderThickness"android:left="@dimen/borderThickness"android:right="@dimen/borderThickness"android:top="@dimen/borderThickness"/><cornersandroid:radius="1dp"/><!-- remove line to get sharp corners --></shape>
Замените @dimen/borderThicknessи @color/borderColorна что хотите или добавьте соответствующий размер / цвет.
Добавьте Drawable в качестве фона для вашего ImageView:
Вы должны использовать android:cropToPadding="true", иначе определенный отступ не имеет никакого эффекта. В качестве альтернативы используйте android:padding="@dimen/borderThickness"в вашем ImageView для достижения того же. Если граница обрамляет родителя вместо вашего ImageView, попробуйте использовать android:adjustViewBounds="true".
Изменить цвет границы
Самый простой способ изменить цвет границы в коде - использовать атрибут tintBackgound.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED);// changes border color to red
После изучения в течение некоторого времени, использование foregroundатрибутов из этого ответа SO дает здесь результатandroid:foreground="@drawable/all_round_border_white"
к сожалению, это дает мне «нехороший» угол границы, как на картинке ниже:
1) Отредактируйте рамку, чтобы содержимое находилось внутри (с помощью инструмента 9patch).
2) Поместите ImageViewвнутрь a Linearlayout, и установите фон рамки или цвет, который вы хотите, в качестве фона Linearlayout. Когда вы устанавливаете рамку так, чтобы содержимое было внутри себя, вы ImageViewбудете внутри рамки (именно там, где вы устанавливаете контент с помощью инструмента 9patch).
Следующее - мое самое простое решение этой долгой проблемы.
<FrameLayout
android:layout_width="112dp"
android:layout_height="112dp"
android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
android:layout_marginRight="16dp" <!-- May vary according to your needs -->
android:layout_centerVertical="true">
<!-- following imageView acts as the boarder which sitting in the background of our main container ImageView --><ImageViewandroid:layout_width="112dp"android:layout_height="112dp"android:background="#000"/><!-- following imageView holds the image as the container to our image --><!-- layout_margin defines the width of our boarder, here it's 1dp --><ImageViewandroid:layout_width="110dp"android:layout_height="110dp"android:layout_margin="1dp"android:id="@+id/itemImageThumbnailImgVw"android:src="@drawable/banana"android:background="#FFF"/></FrameLayout>
В следующем ответе я объяснил это достаточно хорошо, пожалуйста, посмотрите на это тоже!
Я надеюсь, что это будет полезно для кого-то еще там!
Ответы:
Я установил ниже xml на фон просмотра изображений как Drawable. Оно работает.
А потом добавь
android:background="@drawable/yourXmlFileName"
в свойImageView
источник
android:background="@drawable/yourXmlFileName"
кImageView
Ниже приведен код, который у меня был с черной рамкой. Обратите внимание, что я не использовал дополнительный XML-файл для границы.
источник
android:scaleType="centerCrop"
.scaleType="centerCrop"
, не забудьте также добавитьcropToPadding="true"
Это старый пост, который я знаю, но я подумал, что это может кому-то помочь.
Если вы хотите смоделировать полупрозрачную границу, которая не перекрывает «сплошной» цвет фигуры, используйте это в своем XML. Обратите внимание, что я здесь вообще не использую тег «штрих», так как кажется, что он всегда перекрывает фактическую нарисованную форму.
источник
ImageView
в файле XMLсохраните ниже код с именем
border_image.xml
и он должен быть в папке drawableесли вы хотите задать закругленный угол для границы изображения, вы можете изменить строку в файле border.xml
источник
Создать границу
Создайте XML-файл (например, «frame_image_view.xml») со следующим содержимым в папке для рисования:
Замените
@dimen/borderThickness
и@color/borderColor
на что хотите или добавьте соответствующий размер / цвет.Добавьте Drawable в качестве фона для вашего ImageView:
Вы должны использовать
android:cropToPadding="true"
, иначе определенный отступ не имеет никакого эффекта. В качестве альтернативы используйтеandroid:padding="@dimen/borderThickness"
в вашем ImageView для достижения того же. Если граница обрамляет родителя вместо вашего ImageView, попробуйте использоватьandroid:adjustViewBounds="true"
.Изменить цвет границы
Самый простой способ изменить цвет границы в коде - использовать атрибут tintBackgound.
или
Не забудьте определить свой
newColor
.источник
Добавьте фон Drawable, как res / drawables / background.xml:
Обновите фон ImageView в res / layout / foo.xml:
Исключите заполнение ImageView, если вы хотите, чтобы src рисовал поверх фона.
источник
Это было использовано выше, но не упоминается исключительно.
Если это правда , изображение будет обрезано, чтобы соответствовать его отступам.
Это сделает
ImageView
исходный текст внутри отступа добавленным к его фону.С помощью XML это можно сделать, как показано ниже:
источник
Вы должны создать background.xml в Res / Drawable этот код
источник
Для тех, кто ищет пользовательские границы и форму ImageView. Вы можете использовать android-shape-imageview
Просто добавь
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
в свойbuild.gradle
.И использовать в вашем макете.
источник
Я почти сдался по этому поводу.
Это мое условие, использующее глиссаду для загрузки изображения, подробные сведения о трансформации закругленного угла здесь и здесь.
У меня также есть те же атрибуты для моего
ImageView
, для всех здесь ответить 1 , здесь 2 и здесь 3Но все равно безуспешно.
После изучения в течение некоторого времени, использование
foreground
атрибутов из этого ответа SO дает здесь результатandroid:foreground="@drawable/all_round_border_white"
к сожалению, это дает мне «нехороший» угол границы, как на картинке ниже:
источник
Мне было гораздо проще сделать это:
1) Отредактируйте рамку, чтобы содержимое находилось внутри (с помощью инструмента 9patch).
2) Поместите
ImageView
внутрь aLinearlayout
, и установите фон рамки или цвет, который вы хотите, в качестве фонаLinearlayout
. Когда вы устанавливаете рамку так, чтобы содержимое было внутри себя, выImageView
будете внутри рамки (именно там, где вы устанавливаете контент с помощью инструмента 9patch).источник
Следующее - мое самое простое решение этой долгой проблемы.
В следующем ответе я объяснил это достаточно хорошо, пожалуйста, посмотрите на это тоже!
Я надеюсь, что это будет полезно для кого-то еще там!
источник
В том же XML я использовал следующее:
источник
Сначала добавьте нужный цвет фона в качестве цвета вашей границы, затем
измените cropToPadding на true и после этого добавьте отступ.
Тогда у вас будет граница для вашего imageView.
источник