sim .. parece uma borda. Porém, quando você usa uma imagem desenhável com fundo transparente, ela não mostra a imagem corretamente. mostra a cor preta onde quer que você tenha o transparente. Portanto, sua resposta não é a melhor abordagem.
Praveen
19
sim! mas você tem uma borda sem criar outro arquivo xml.
User609239
7
Isso não funciona quando você redimensiona a imagem usando android:scaleType="centerCrop".
Silox 23/02
8
isso é ruim porque cria overdraw desnecessário
Jay Soyer
11
@Silox para scaleType="centerCrop", certifique-se de também adicionarcropToPadding="true"
Adam Johns
24
Este é um post antigo que eu conheço, mas achei que isso poderia ajudar alguém por aí.
Se você deseja simular uma borda translúcida que não se sobrepõe à cor "sólida" da forma, use-a no seu xml. Observe que eu não uso a tag "stroke" aqui, pois parece sempre se sobrepor à forma desenhada.
Também gosto disso, mas se você tornar as bordas externas muito pequenas, os cantos ficarão em branco. Funciona bem com qualquer coisa 2dp e acima.
John Stack
A vantagem desse método é que ele permite cantos arredondados. Se você não deseja que a borda da resposta anterior se sobreponha, adicione preenchimento à tag ImageView. A desvantagem deste método é que a borda sangrará na área da imagem se estiver usando um fundo translúcido. Por isso, escolhi o método anterior porque gosto mais do fundo translúcido do que dos cantos arredondados.
apenas uma observação: se a imagem for configurada dinamicamente, a borda precisará ser configurada novamente no código, caso contrário, a imagem estará sobre a borda.
Rob85
4
Criar borda
Crie um arquivo xml (por exemplo, "frame_image_view.xml") com o seguinte conteúdo na sua pasta drawable:
<?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>
Substitua @dimen/borderThicknesse@color/borderColor com o que quiser ou adicione dimen / cor correspondente.
Adicione o Drawable como plano de fundo ao seu ImageView:
Você precisa usar android:cropToPadding="true", caso contrário, o preenchimento definido não terá efeito. Como alternativa, use android:padding="@dimen/borderThickness"o ImageView para obter o mesmo. Se a borda enquadrar o pai em vez do ImageView, tente usar android:adjustViewBounds="true".
Alterar cor da borda
A maneira mais fácil de alterar a cor da borda no código é usar o atributo tintBackgound.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED);// changes border color to red
Depois de pesquisar por algum tempo, o uso de foregroundatributos desta resposta SO fornece um resultadoandroid:foreground="@drawable/all_round_border_white"
infelizmente, isso me deu o canto da borda "nada legal", como na imagem abaixo:
1) Edite o quadro para incluir o conteúdo (com a ferramenta 9patch).
2) Coloque o ImageViewinterior a Linearlayoute defina o plano de fundo ou a cor do quadro que você deseja como plano de fundo do Linearlayout. Conforme você define o quadro para ter o conteúdo dentro dele, você ImageViewestará dentro do quadro (exatamente onde você definiu o conteúdo com a ferramenta 9patch).
A seguir, é minha solução mais simples para esse longo problema.
<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>
Na resposta a seguir eu expliquei bem o suficiente, por favor, dê uma olhada nisso também!
Respostas:
Defino o xml abaixo como plano de fundo do Image View como Drawable. Funciona.
E depois adicione
android:background="@drawable/yourXmlFileName"
ao seuImageView
fonte
android:background="@drawable/yourXmlFileName"
aImageView
A seguir está o código que eu costumava ter borda preta. Observe que eu não usei arquivo xml extra para borda.
fonte
android:scaleType="centerCrop"
.scaleType="centerCrop"
, certifique-se de também adicionarcropToPadding="true"
Este é um post antigo que eu conheço, mas achei que isso poderia ajudar alguém por aí.
Se você deseja simular uma borda translúcida que não se sobrepõe à cor "sólida" da forma, use-a no seu xml. Observe que eu não uso a tag "stroke" aqui, pois parece sempre se sobrepor à forma desenhada.
fonte
ImageView
no arquivo xmlsalve o código abaixo com o nome de
border_image.xml
e ele deve estar na pasta drawablese você quiser dar um canto arredondado à borda da imagem, poderá alterar uma linha no arquivo border.xml
fonte
Criar borda
Crie um arquivo xml (por exemplo, "frame_image_view.xml") com o seguinte conteúdo na sua pasta drawable:
Substitua
@dimen/borderThickness
e@color/borderColor
com o que quiser ou adicione dimen / cor correspondente.Adicione o Drawable como plano de fundo ao seu ImageView:
Você precisa usar
android:cropToPadding="true"
, caso contrário, o preenchimento definido não terá efeito. Como alternativa, useandroid:padding="@dimen/borderThickness"
o ImageView para obter o mesmo. Se a borda enquadrar o pai em vez do ImageView, tente usarandroid:adjustViewBounds="true"
.Alterar cor da borda
A maneira mais fácil de alterar a cor da borda no código é usar o atributo tintBackgound.
ou
Não se esqueça de definir o seu
newColor
.fonte
Adicione um Drawable em segundo plano como res / drawables / background.xml:
Atualize o plano de fundo do ImageView em res / layout / foo.xml:
Exclua o preenchimento do ImageView se desejar que o src desenhe sobre o plano de fundo.
fonte
Isso foi usado acima, mas não mencionado exclusivamente.
Se verdadeiro , a imagem será cortada para caber dentro do preenchimento.
Isso fará com que a
ImageView
fonte caiba dentro do preenchimento adicionado ao plano de fundo.Via XML, isso pode ser feito da seguinte maneira:
fonte
você deve criar um background.xml em res / drawable este código
fonte
Para quem está pesquisando borda e forma personalizadas do ImageView. Você pode usar o android-shape-imageview
Basta adicionar
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
ao seubuild.gradle
.E use em seu layout.
fonte
Eu quase desisti disso.
Esta é minha condição usando o deslize para carregar a imagem, consulte o problema detalhado do deslize aqui sobre transformações de cantos arredondados e aqui
Eu também tenho os mesmos atributos para o meu
ImageView
, pois todos respondem aqui 1 , aqui 2 e aqui 3Mas ainda sem sucesso.
Depois de pesquisar por algum tempo, o uso de
foreground
atributos desta resposta SO fornece um resultadoandroid:foreground="@drawable/all_round_border_white"
infelizmente, isso me deu o canto da borda "nada legal", como na imagem abaixo:
fonte
Achei muito mais fácil fazer isso:
1) Edite o quadro para incluir o conteúdo (com a ferramenta 9patch).
2) Coloque o
ImageView
interior aLinearlayout
e defina o plano de fundo ou a cor do quadro que você deseja como plano de fundo doLinearlayout
. Conforme você define o quadro para ter o conteúdo dentro dele, vocêImageView
estará dentro do quadro (exatamente onde você definiu o conteúdo com a ferramenta 9patch).fonte
A seguir, é minha solução mais simples para esse longo problema.
Na resposta a seguir eu expliquei bem o suficiente, por favor, dê uma olhada nisso também!
Espero que isso seja útil para alguém por aí!
fonte
No mesmo xml que usei a seguir:
fonte
Primeiro, adicione a cor de fundo que você deseja como a cor da borda e, em seguida,
altere o cropToPadding para true e depois adicione o preenchimento.
Então você terá sua borda para o seu imageView.
fonte