Как отобразить границу в Imageview?

#android #image #imageview #border #android-imageview

#Android #изображение #imageview #граница #android-imageview

Вопрос:

Друзья, как отобразить границу в Imageview?

Я хочу, чтобы в результате все изображения в мобильной галерее отображались с рамкой.

пожалуйста, поблагодарите меня за аванс….

Ответ №1:

Вы можете создать ресурс (layer drawable xml) для вашей ImageView «границы» (фактически фона) и объявить в вашем, theme что ImageView фоновым ресурсом является drawable xml.

Если вам нужно, чтобы эта «граница» была изменена на основе ImageView состояния ( focused , selected и т.д.), Тогда вам следует создать больше объектов для рисования слоев и объединить их в XML-селектор (state drawable).
Затем в вашей теме вы должны установить ImageView фон таким selector.xml .

Обновить
Ниже приведен пример того, как задать простую границу для ваших изображений, что приведет к

настройка с помощью border

Вы должны

  1. создайте новый файл для рисования слоя ( image_border.xml ),
  2. измените / создайте свой styles.xml файл
  3. измените / создайте свой colors.xml файл
  4. измените свой XML-файл макета (или свой код), чтобы применить стиль к ImageView .

res/drawable/image_border.xml

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <gradient android:angle="90" 
                android:startColor="@color/image_border_start" 
                android:centerColor="@color/image_border_center"
                android:endColor="@color/image_border_end" />
        </shape>
    </item>
    <item android:top="2dp" android:left="2dp" 
        android:right="2dp" android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/default_back_color" />
        </shape>
    </item>
</layer-list>
  

res/values/styles.xml
Добавьте следующие строки:

 <style name="myImageView">
    <!-- 3dp so the background border to be visible -->
    <item name="android:padding">3dp</item>
    <item name="android:background">@drawable/image_border</item>
    <item name="android:scaleType">fitCenter</item>
</style>
  

res/values/colors.xml
Добавьте следующие строки:

 <color name="image_border_start">#40990000</color>
<color name="image_border_end">#FF660000</color>
<color name="image_border_center">#FFFF3333</color>
  

И, наконец, укажите свой стиль ImageView в вашем макете xml:

 <ImageView android:id="@ id/my_image" 
    android:layout_width="100dp" android:layout_height="100dp"
    android:src="@drawable/efteling"
    style="@style/myImageView" />
  

Комментарии:

1. это закроет вид изображения, если граница станет толще. есть ли способ не закрывать ее?

Ответ №2:

Вы можете использовать этот XML-файл в качестве рисованного вместо нескольких файлов, но этот файл помещается в папку drawable. В ImageView используйте этот XML-файл в качестве фонового рисунка, например: android:background="@drawable/following code file
name"
.

Я надеюсь, что это полезно для вас.

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <stroke android:width="1dp" android:color="#000000" />
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
</shape>
  

Ответ №3:

Я перепробовал все вышеупомянутые решения, но у меня они не сработали! Итак, я нашел простое решение для этого! 🙂

Я помню, что читал о FrameLayout Android в следующей статье, в которой говорилось, что это помогает нам накладывать элементы нашего пользовательского интерфейса друг на друга в том же порядке, в каком мы их складываем.

Решение:

 <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 -->
    <ImageView
        android: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 -->
    <ImageView
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:layout_margin="1dp"
        android:id="@ id/itemImageThumbnailImgVw"
        android:src="@drawable/banana"
        android:background="#FFF"/>
</FrameLayout>
  

Предварительный просмотр:

И это все. Вы получите следующее, похожее на ImageView!

предварительный просмотр ImageView с помощью boarder

Плюсы и минусы:

Я думаю, что это довольно простое решение для использования в любом другом месте, и все, что вы делаете, находится в одном месте, поэтому его легче модифицировать. Однако мне не нравится добавлять два ImageViews.