programacion - imagebutton android cambiar imagen
Cambia la imagen de ImageView programáticamente en Android (7)
Respuesta corta
Solo copie una imagen en su carpeta res/drawable
y use
imageView.setImageResource(R.drawable.my_image);
Detalles
La variedad de respuestas puede causar un poco de confusión. Tenemos
-
setBackgroundResource()
-
setBackgroundDrawable()
-
setBackground()
-
setImageResource()
-
setImageDrawable()
-
setImageBitmap()
Todos los métodos con Background
en su nombre pertenecen a la clase View
, no a ImageView
específicamente. Pero como ImageView
hereda de View
también puede usarlos. Los métodos con Image
en su nombre pertenecen específicamente a ImageView
.
Todos los métodos de View
hacen lo mismo entre sí (aunque setBackgroundDrawable()
está en desuso), así que solo nos centraremos en setBackgroundResource()
. De manera similar, todos los métodos ImageView
hacen lo mismo, por lo que nos centraremos en setImageResource()
. La única diferencia entre los métodos es el tipo de parámetro que se pasa.
Preparar
Aquí hay un FrameLayout
que contiene un ImageView
. El ImageView
inicialmente no tiene ninguna imagen en él. (Solo agregué el FrameLayout
para poder poner un borde alrededor de él. De esa manera puedes ver el borde de ImageView
).
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="250dp"
android:layout_height="250dp"
android:background="@drawable/border"
android:layout_centerInParent="true">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</RelativeLayout>
A continuación vamos a comparar los diferentes métodos.
setImageResource ()
Si usa setImageResource()
ImageView, entonces la imagen mantiene su relación de aspecto y se redimensiona para ajustarse. Aquí hay dos ejemplos de imágenes diferentes.
-
imageView.setImageResource(R.drawable.sky);
-
imageView.setImageResource(R.drawable.balloons);
setBackgroundResource ()
Por otro lado, al usar setBackgroundResource()
View, el recurso de imagen se estira para llenar la vista.
-
imageView.setBackgroundResource(R.drawable.sky);
-
imageView.setBackgroundResource(R.drawable.balloons);
Ambos
La imagen de fondo de la Vista y la imagen de ImageView se dibujan por separado, por lo que puede configurar ambas.
imageView.setBackgroundResource(R.drawable.sky);
imageView.setImageResource(R.drawable.balloons);
Cuando cambio la imagen mediante programación, ¿se muestra una nueva imagen sobre la imagen anterior que se estableció originalmente en el archivo de diseño?
Aquí hay un fragmento de mi archivo de diseño:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="39dp"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/qStatusImage"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_margin="5dp"
android:background="@drawable/thumbs_down"
/>
<TextView
android:id="@+id/grp_child"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/radio_colors"
android:textStyle="normal"
android:background="@color/grey"
/>
</LinearLayout>
Y el código que establece el imageView:
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//Answers
if(answersGroup != null)
answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId()));
qImageView = (ImageView) V.findViewById(R.id.qStatusImage);
if(ans ==0 || ans == 5){
// qSV.setImageResource(0);
qImageView.setImageResource(R.drawable.thumbs_up);
}
else
qImageView.setImageResource(R.drawable.thumbs_down);
}
});
¿Qué me estoy perdiendo?
En su XML para la vista de imagen, donde tiene android:background="@drawable/thumbs_down
cambie esto a android:src="@drawable/thumbs_down"
Actualmente está colocando esa imagen como el fondo de la vista y no la imagen real en ella.
Eso sucede porque está configurando el src de ImageView
lugar del fondo.
Use esto en su lugar:
qImageView.setBackgroundResource(R.drawable.thumbs_down);
Here un hilo que habla de las diferencias entre los dos métodos.
Puedes usar
val drawableCompat = ContextCompat.getDrawable(context, R.drawable.ic_emoticon_happy)
o en java java
Drawable drawableCompat = ContextCompat.getDrawable(getContext(), R.drawable.ic_emoticon_happy)
Uso en XML:
android:src="@drawable/image"
Uso de la fuente:
imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image));
En diseño XML
android:background="@drawable/imagename
android:src="@drawable/imagename"
Imagen dibujable a través de código
imageview.setImageResource(R.drawable.imagename);
Imagen del servidor
## Dependency ##
implementation ''com.github.bumptech.glide:glide:4.7.1''
annotationProcessor ''com.github.bumptech.glide:compiler:4.7.1''
Glide.with(context).load(url) .placeholder(R.drawable.image)
.into(imageView);
## dependency ##
implementation ''com.squareup.picasso:picasso:2.71828''
Picasso.with(context).load(url) .placeholder(R.drawable.image)
.into(imageView);
qImageView.setImageResource(R.drawable.img2);
Creo que esto te ayudará