Відповіді:
Я встановив нижче xml на фон перегляду зображень як графічний. Це працює.
<?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>
А потім додайте android:background="@drawable/yourXmlFileName"
до свогоImageView
android:background="@drawable/yourXmlFileName"
доImageView
Далі йде код, який у мене раніше було чорною облямівкою. Зауважте, що я не використовував додатковий XML-файл для межі.
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/red_minus_icon"
android:background="#000000"
android:padding="1dp"/>
android:scaleType="centerCrop"
.
scaleType="centerCrop"
, обов’язково додайтеcropToPadding="true"
Це стара публікація, яку я знаю, але я думав, що це може допомогти комусь там.
Якщо ви хочете імітувати напівпрозору облямівку, яка не перекриває "твердий" колір форми, використовуйте це у вашому xml. Зауважте, що я взагалі не використовую тег "штрих", оскільки, здається, завжди перекриває фактичну намальовану форму.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#55111111" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<solid android:color="#ff252525" />
</shape>
</item>
</layer-list>
ImageView
у файлі xml
<ImageView
android:id="@+id/myImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="1dp"
android:scaleType="centerCrop"
android:cropToPadding="true"
android:background="@drawable/border_image"
android:src="@drawable/ic_launcher" />
збережіть нижче код з назвою, border_image.xml
і він повинен знаходитись у папці, що малюється
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#ffffff"
android:startColor="#ffffff" />
<corners android:radius="0dp" />
<stroke
android:width="0.7dp"
android:color="#b4b4b4" />
</shape>
якщо ви хочете навести закруглений кут до межі зображення, то ви можете змінити рядок у файлі border.xml
<corners android:radius="4dp" />
Створіть XML-файл (наприклад, "frame_image_view.xml") із наступним вмістом у папці, що малюється:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="@dimen/borderThickness"
android:color="@color/borderColor" />
<padding
android:bottom="@dimen/borderThickness"
android:left="@dimen/borderThickness"
android:right="@dimen/borderThickness"
android:top="@dimen/borderThickness" />
<corners android:radius="1dp" /> <!-- remove line to get sharp corners -->
</shape>
Замініть @dimen/borderThickness
і @color/borderColor
будь-що, що хочете, або додайте відповідні габарити / кольори.
Додайте графічний малюнок як фон у свій ImageView:
<ImageView
android:id="@+id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/frame_image_view"
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
Доводиться користуватися 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
або
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));
Не забудьте визначити своє newColor
.
Додайте фон Dravable, як res / drawables / background.xml:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="@android:color/black" />
</shape>
Оновіть фон ImageView у res / layout / foo.xml:
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:background="@drawable/background"
android:src="@drawable/bar" />
...
Виключіть прокладку ImageView, якщо ви хочете, щоб src малював над фоном.
Це було використано вище, але не згадано виключно.
setCropToPadding(boolean);
Якщо це правда , зображення буде обрізане, щоб вписатись у його підкладку.
Це зробить ImageView
джерело, щоб поміститися в додаток до підкладки, що додається до його фону.
Через XML це можна зробити, як нижче-
android:cropToPadding="true"
Ви повинні створити background.xml в Res / Draading цього коду
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="6dp" />
<stroke
android:width="6dp"
android:color="@android:color/white" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
Для тих, хто шукає власні межі та форму ImageView. Ви можете використовувати android-shape-imageview
Просто додайте compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
до свогоbuild.gradle
.
І використовуйте у своєму макеті.
<com.github.siyamed.shapeimageview.BubbleImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/neo"
app:siArrowPosition="right"
app:siSquare="true"/>
Я майже з цього приводу відмовився.
Це мій стан використання глієда для завантаження зображень, дивіться тут детальну проблему про глісе про перетворення округлих кутів та тут
У мене також однакові атрибути для моїх ImageView
, тому що всі відповідають тут 1 , тут 2 і тут 3
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"`
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/path_to_rounded_drawable"
Але успіху все одно немає.
Протягом деякого часу досліджуючи тут, використовуючи foreground
атрибути з цієї відповіді на ТА тут даєте результатandroid:foreground="@drawable/all_round_border_white"
на жаль, це дає мені "не приємний" куточок кордону, як зображено нижче:
Мені було набагато простіше це зробити:
1) Відредагуйте кадр, щоб вміст містився всередині (за допомогою інструмента 9patch).
2) Помістіть ImageView
внутрішню Linearlayout
частину a і встановіть потрібний фон або колір кадру як тло 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 -->
<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>
У наступній відповіді я пояснив це досить добре, будь ласка, подивіться і на це!
Я сподіваюся, що це буде корисно для когось іншого там!
У тому ж xml я використовував наступне:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff" <!-- border color -->
android:padding="3dp"> <!-- border width -->
<ImageView
android:layout_width="160dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop" />
</RelativeLayout>