ouais .. ça ressemble à une frontière. Mais lorsque vous utilisez une image dessinable avec un fond transparent, elle ne montrera pas correctement votre image avec bordure. il montre la couleur noire partout où vous avez le transparent. Votre réponse n'est donc pas la meilleure approche.
Praveen
19
Ouais! mais vous avez une bordure sans créer un autre fichier xml.
user609239
7
Cela ne fonctionne pas lorsque vous redimensionnez l'image à l'aide de android:scaleType="centerCrop".
Silox
8
c'est mauvais car cela crée un surplus inutile
Jay Soyer
1
@Silox pour scaleType="centerCrop", assurez-vous d'ajouter égalementcropToPadding="true"
Adam Johns
24
C'est un vieux post que je connais, mais j'ai pensé que cela pourrait peut-être aider quelqu'un là-bas.
Si vous souhaitez simuler une bordure translucide qui ne chevauche pas la couleur "solide" de la forme, utilisez-la dans votre xml. Notez que je n'utilise pas du tout la balise "stroke" car elle semble toujours chevaucher la forme réelle dessinée.
J'aime bien aussi mais si vous faites les bords extérieurs trop petits, les coins sont vides. Cela fonctionne bien avec n'importe quoi 2dp et au-dessus.
John Stack
L'avantage de cette méthode est qu'elle permet des coins arrondis. Si vous ne voulez pas que la bordure de la réponse précédente se chevauche, ajoutez un remplissage à la balise ImageView. L'inconvénient de cette méthode est que la bordure saignera dans la zone d'image si vous utilisez un fond translucide. J'ai donc choisi la méthode précédente car j'aime mieux le fond translucide que les coins arrondis.
juste une note à ce sujet, si l'image est définie dynamiquement, la bordure doit être définie à nouveau dans le code, sinon l'image est au-dessus de la bordure.
Rob85
4
Créer une bordure
Créez un fichier xml (par exemple "frame_image_view.xml") avec le contenu suivant dans votre dossier dessinable:
<?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>
Remplacez @dimen/borderThicknesset @color/borderColorpar ce que vous voulez ou ajoutez la dimension / couleur correspondante.
Ajoutez le Drawable en arrière-plan à votre ImageView:
Vous devez utiliser android:cropToPadding="true", sinon le remplissage défini n'a aucun effet. Vous pouvez également utiliser android:padding="@dimen/borderThickness"dans votre ImageView pour obtenir le même résultat. Si la bordure encadre le parent au lieu de votre ImageView, essayez d'utiliser android:adjustViewBounds="true".
Changer la couleur de la bordure
La façon la plus simple de modifier la couleur de votre bordure dans le code consiste à utiliser l'attribut tintBackgound.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED);// changes border color to red
Après avoir fait des recherches pendant un certain temps, l'utilisation d'un foregroundattribut de cette réponse SO donne ici un résultatandroid:foreground="@drawable/all_round_border_white"
malheureusement, cela me donne le coin de la bordure "pas agréable" comme l'image ci-dessous:
1) Modifiez le cadre pour avoir le contenu à l'intérieur (avec l'outil 9patch).
2) Placez l' ImageViewintérieur a Linearlayoutet définissez l'arrière-plan ou la couleur du cadre comme arrière-plan du Linearlayout. Lorsque vous définissez le cadre pour avoir le contenu à l'intérieur de lui-même, vous ImageViewserez à l'intérieur du cadre (là où vous définissez le contenu avec l'outil 9patch).
Voici ma solution la plus simple à ce long problème.
<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>
Dans la réponse suivante je l'ai assez bien expliqué, jetez un œil à cela aussi!
J'espère que cela sera utile à quelqu'un d'autre là-bas!
Réponses:
J'ai mis le xml ci-dessous à l'arrière-plan de la vue d'image comme dessinable. Ça marche.
Et puis ajoutez
android:background="@drawable/yourXmlFileName"
à votreImageView
la source
android:background="@drawable/yourXmlFileName"
àImageView
Voici le code que j'avais l'habitude d'avoir une bordure noire. Notez que je n'ai pas utilisé de fichier xml supplémentaire pour la bordure.
la source
android:scaleType="centerCrop"
.scaleType="centerCrop"
, assurez-vous d'ajouter égalementcropToPadding="true"
C'est un vieux post que je connais, mais j'ai pensé que cela pourrait peut-être aider quelqu'un là-bas.
Si vous souhaitez simuler une bordure translucide qui ne chevauche pas la couleur "solide" de la forme, utilisez-la dans votre xml. Notez que je n'utilise pas du tout la balise "stroke" car elle semble toujours chevaucher la forme réelle dessinée.
la source
ImageView
dans un fichier xmlenregistrer le code ci-dessous avec le nom de
border_image.xml
et il devrait être dans un dossier dessinablesi vous voulez donner un coin arrondi à la bordure de l'image, vous pouvez changer une ligne dans le fichier border.xml
la source
Créer une bordure
Créez un fichier xml (par exemple "frame_image_view.xml") avec le contenu suivant dans votre dossier dessinable:
Remplacez
@dimen/borderThickness
et@color/borderColor
par ce que vous voulez ou ajoutez la dimension / couleur correspondante.Ajoutez le Drawable en arrière-plan à votre ImageView:
Vous devez utiliser
android:cropToPadding="true"
, sinon le remplissage défini n'a aucun effet. Vous pouvez également utiliserandroid:padding="@dimen/borderThickness"
dans votre ImageView pour obtenir le même résultat. Si la bordure encadre le parent au lieu de votre ImageView, essayez d'utiliserandroid:adjustViewBounds="true"
.Changer la couleur de la bordure
La façon la plus simple de modifier la couleur de votre bordure dans le code consiste à utiliser l'attribut tintBackgound.
ou
N'oubliez pas de définir votre
newColor
.la source
Ajoutez un arrière-plan Drawable comme res / drawables / background.xml:
Mettez à jour l'arrière-plan d'ImageView dans res / layout / foo.xml:
Excluez le remplissage ImageView si vous souhaitez que le src dessine sur l'arrière-plan.
la source
Ceci a été utilisé ci-dessus mais n'est pas mentionné exclusivement.
Si vrai , l'image sera rognée pour tenir dans son rembourrage.
Cela fera en sorte que la
ImageView
source tienne dans le remplissage ajouté à son arrière-plan.Via XML, cela peut être fait comme ci-dessous-
la source
vous devez créer un background.xml dans res / drawable ce code
la source
Pour ceux qui recherchent une bordure et une forme personnalisées d'ImageView. Vous pouvez utiliser android-shape-imageview
Ajoutez simplement
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
à votrebuild.gradle
.Et utilisez dans votre mise en page.
la source
J'ai presque abandonné à ce sujet.
Ceci est ma condition d'utilisation de glissement pour charger l'image, voir le problème de glissement détaillé ici sur les transformations des coins arrondis et ici
J'ai aussi les mêmes attributs pour moi
ImageView
, pour tout le monde répondez ici 1 , ici 2 et ici 3Mais toujours pas de succès.
Après avoir fait des recherches pendant un certain temps, l'utilisation d'un
foreground
attribut de cette réponse SO donne ici un résultatandroid:foreground="@drawable/all_round_border_white"
malheureusement, cela me donne le coin de la bordure "pas agréable" comme l'image ci-dessous:
la source
Je l'ai trouvé beaucoup plus facile à faire:
1) Modifiez le cadre pour avoir le contenu à l'intérieur (avec l'outil 9patch).
2) Placez l'
ImageView
intérieur aLinearlayout
et définissez l'arrière-plan ou la couleur du cadre comme arrière-plan duLinearlayout
. Lorsque vous définissez le cadre pour avoir le contenu à l'intérieur de lui-même, vousImageView
serez à l'intérieur du cadre (là où vous définissez le contenu avec l'outil 9patch).la source
Voici ma solution la plus simple à ce long problème.
Dans la réponse suivante je l'ai assez bien expliqué, jetez un œil à cela aussi!
J'espère que cela sera utile à quelqu'un d'autre là-bas!
la source
Dans le même xml que j'ai utilisé ensuite:
la source
Tout d'abord, ajoutez la couleur d'arrière-plan que vous souhaitez comme couleur de votre bordure, puis
changer le cropToPadding sur true et après cela ajouter un remplissage.
Ensuite, vous aurez votre bordure pour votre imageView.
la source