Sí ... parece un borde. Pero cuando usa una imagen dibujable con fondo transparente, entonces no mostrará su imagen con borde correctamente. muestra color negro dondequiera que tenga el transparente. Entonces su respuesta no es el mejor enfoque.
Praveen
19
¡Si! pero tiene un borde sin crear otro archivo xml.
user609239
77
Esto no funciona cuando cambia el tamaño de la imagen usando android:scaleType="centerCrop".
Silox
8
esto es malo porque crea un sobregiro innecesario
Jay Soyer
1
@Silox para scaleType="centerCrop", asegúrese de agregar tambiéncropToPadding="true"
Adam Johns
24
Esta es una publicación antigua que conozco, pero pensé que esto podría ayudar a alguien por ahí.
Si desea simular un borde translúcido que no se superponga con el color "sólido" de la forma, utilice esto en su xml. Tenga en cuenta que no uso la etiqueta "trazo" aquí, ya que parece superponerse siempre a la forma dibujada real.
También me gusta, pero si haces que los bordes exteriores sean demasiado pequeños, las esquinas están en blanco. Funciona bien con cualquier cosa de 2dp y superior.
John Stack
El beneficio de este método es que permite esquinas redondeadas. Si no desea que el borde de la respuesta anterior se superponga, agregue relleno a la etiqueta ImageView. El inconveniente de este método es que el borde sangrará en el área de la imagen si se usa un fondo translúcido. Así que elijo el método anterior porque me gusta el fondo translúcido mejor que las esquinas redondeadas.
solo una nota sobre esto, si la imagen se establece dinámicamente, entonces el borde debe establecerse nuevamente en el código, de lo contrario, la imagen está por encima del borde.
Rob85
4
Crear borde
Cree un archivo xml (por ejemplo, "frame_image_view.xml") con el siguiente contenido en su carpeta dibujable:
<?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>
Reemplace @dimen/borderThicknessy @color/borderColorcon lo que quiera o agregue el color / color correspondiente.
Tienes que usar android:cropToPadding="true", de lo contrario el relleno definido no tiene ningún efecto. Alternativamente, use android:padding="@dimen/borderThickness"en su ImageView para lograr lo mismo. Si el borde enmarca al padre en lugar de su ImageView, intente usarlo android:adjustViewBounds="true".
Cambiar color de borde
La forma más fácil de cambiar el color del borde en el código es usar el atributo tintBackgound.
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED);// changes border color to red
Después de investigar por un tiempo, el uso de foregroundatributos de esta respuesta SO aquí da un resultadoandroid:foreground="@drawable/all_round_border_white"
desafortunadamente me da la esquina del borde "no agradable" como la imagen de abajo:
1) Edite el marco para tener el contenido dentro (con la herramienta 9patch).
2) Coloque el ImageViewinterior de a Linearlayout, y establezca el fondo o el color del marco que desee como fondo del Linearlayout. A medida que configura el marco para tener el contenido dentro de sí mismo, ImageViewestará dentro del marco (justo donde configura el contenido con la herramienta 9patch).
La siguiente es mi solución más simple para este largo 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>
En la siguiente respuesta lo he explicado bastante bien, ¡échale un vistazo también!
¡Espero que esto sea útil para alguien más por ahí!
Respuestas:
Configuré el siguiente xml en el fondo de la Vista de imagen como Dibujable. Funciona.
Y luego agregue
android:background="@drawable/yourXmlFileName"
a suImageView
fuente
android:background="@drawable/yourXmlFileName"
aImageView
El siguiente es el código que solía tener borde negro. Tenga en cuenta que no he usado un archivo xml extra para el borde.
fuente
android:scaleType="centerCrop"
.scaleType="centerCrop"
, asegúrese de agregar tambiéncropToPadding="true"
Esta es una publicación antigua que conozco, pero pensé que esto podría ayudar a alguien por ahí.
Si desea simular un borde translúcido que no se superponga con el color "sólido" de la forma, utilice esto en su xml. Tenga en cuenta que no uso la etiqueta "trazo" aquí, ya que parece superponerse siempre a la forma dibujada real.
fuente
ImageView
en archivo xmlguarde el siguiente código con el nombre de
border_image.xml
y debe estar en una carpeta dibujablesi desea dar una esquina redondeada al borde de la imagen, puede cambiar una línea en el archivo border.xml
fuente
Crear borde
Cree un archivo xml (por ejemplo, "frame_image_view.xml") con el siguiente contenido en su carpeta dibujable:
Reemplace
@dimen/borderThickness
y@color/borderColor
con lo que quiera o agregue el color / color correspondiente.Agregue el Drawable como fondo a su ImageView:
Tienes que usar
android:cropToPadding="true"
, de lo contrario el relleno definido no tiene ningún efecto. Alternativamente, useandroid:padding="@dimen/borderThickness"
en su ImageView para lograr lo mismo. Si el borde enmarca al padre en lugar de su ImageView, intente usarloandroid:adjustViewBounds="true"
.Cambiar color de borde
La forma más fácil de cambiar el color del borde en el código es usar el atributo tintBackgound.
o
No olvides definir tu
newColor
.fuente
Agregue un fondo Dibujable como res / drawables / background.xml:
Actualice el fondo de ImageView en res / layout / foo.xml:
Excluya el relleno de ImageView si desea que el src dibuje sobre el fondo.
fuente
Esto se ha utilizado anteriormente pero no se menciona exclusivamente.
Si es cierto , la imagen se recortará para ajustarse a su relleno.
Esto hará que la
ImageView
fuente se ajuste al relleno agregado a su fondo.A través de XML se puede hacer de la siguiente manera:
fuente
debe crear un background.xml en res / drawable este código
fuente
Para aquellos que buscan bordes personalizados y formas de ImageView. Puedes usar android-shape-imageview
Solo agrégalo
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
a tubuild.gradle
.Y úsalo en tu diseño.
fuente
Casi me di por vencido con esto.
Esta es mi condición usando deslizamiento para cargar la imagen, vea el problema de deslizamiento detallado aquí sobre las transformaciones de esquinas redondeadas y aquí
También tengo los mismos atributos para mi
ImageView
, porque todos responden aquí 1 , aquí 2 y aquí 3Pero aún no hay éxito.
Después de investigar por un tiempo, el uso de
foreground
atributos de esta respuesta SO aquí da un resultadoandroid:foreground="@drawable/all_round_border_white"
desafortunadamente me da la esquina del borde "no agradable" como la imagen de abajo:
fuente
Me resultó mucho más fácil hacer esto:
1) Edite el marco para tener el contenido dentro (con la herramienta 9patch).
2) Coloque el
ImageView
interior de aLinearlayout
, y establezca el fondo o el color del marco que desee como fondo delLinearlayout
. A medida que configura el marco para tener el contenido dentro de sí mismo,ImageView
estará dentro del marco (justo donde configura el contenido con la herramienta 9patch).fuente
La siguiente es mi solución más simple para este largo problema.
En la siguiente respuesta lo he explicado bastante bien, ¡échale un vistazo también!
¡Espero que esto sea útil para alguien más por ahí!
fuente
En el mismo xml que he usado a continuación:
fuente
Primero de agregar el color de fondo que desea como el color de su borde, luego
cambie el cropToPadding a verdadero y luego agregue el relleno.
Entonces tendrá su borde para su imageView.
fuente