Android
ImageView
Buscar..
Introducción
ImageView ( android.widget.ImageView
) es una vista para mostrar y manipular recursos de imágenes, como Drawables y Bitmaps.
Algunos efectos, discutidos en este tema, pueden aplicarse a la imagen. La fuente de la imagen se puede configurar en un archivo XML (carpeta de layout
) o programáticamente en un código Java.
Sintaxis
- El método
setImageResource(int resId)
establece un dibujo como el contenido de esteImageView
. - Uso:
imageView.setImageResource(R.drawable.anyImage)
Parámetros
Parámetro | Descripción |
---|---|
resId | el nombre de su archivo de imagen en la carpeta res (generalmente en una carpeta drawable ) |
Establecer recurso de imagen
<ImageView
android:id="@+id/imgExample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
establece un dibujable como contenido de ImageView
usando el atributo XML:
android:src="@drawable/android2"
establecer un dibujo programable:
ImageView imgExample = (ImageView) findViewById(R.id.imgExample);
imgExample.setImageResource(R.drawable.android2);
Establecer alfa
"alfa" se utiliza para especificar la opacidad de una imagen.
establece alfa usando el atributo XML:
android:alpha="0.5"
Nota: toma el valor flotante de 0 (transparente) a 1 (totalmente visible)
Establecer alfa programáticamente:
imgExample.setAlpha(0.5f);
ImageView ScaleType - Centro
Es posible que la imagen contenida en ImageView no se ajuste al tamaño exacto dado al contenedor. En ese caso, el marco le permite cambiar el tamaño de la imagen de varias maneras.
Centrar
<ImageView android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:scaleType="center"
android:background="@android:color/holo_orange_light"/>
Esto no cambiará el tamaño de la imagen y la centrará dentro del contenedor (Naranja = contenedor)
En caso de que el ImageView sea más pequeño que la imagen, la imagen no se redimensionará y solo podrá ver una parte de ella.
texto fuerte
ImageView ScaleType - CenterCrop
Escale la imagen uniformemente (mantenga la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o más grandes que la dimensión correspondiente de la vista (menos el relleno).
Cuando la imagen coincide con las proporciones del contenedor:
Cuando la imagen es más ancha que el contenedor, la expandirá al tamaño más grande (en este caso, la altura) y ajustará el ancho de la imagen sin cambiar sus proporciones, lo que provocará que se recorte.
ImageView ScaleType - CenterInside
Escale la imagen uniformemente (mantenga la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o menores que la dimensión correspondiente de la vista (menos el relleno).
Centrará la imagen y la redimensionará al tamaño más pequeño. Si ambos tamaños de contenedor son más grandes, actuará de la misma manera que el centro.
Pero si uno de los tamaños es pequeño, se ajustará a ese tamaño.
ImageView ScaleType - FitStart y FitEnd
Escala la imagen usando START.
Escala la imagen usando FIN.
FitStart
Esto se ajustará al tamaño más pequeño del contenedor y lo alineará con el inicio.
<ImageView android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:scaleType="fitStart"
android:layout_gravity="center"
android:background="@android:color/holo_orange_light"/>
FitEnd
Esto se ajustará al tamaño más pequeño del contenedor y lo alineará hasta el final.
<ImageView android:layout_width="200dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:scaleType="fitEnd"
android:layout_gravity="center"
android:background="@android:color/holo_orange_light"/>
ImageView ScaleType - FitCenter
Escala la imagen usando CENTRO.
Esto expande la imagen para tratar de coincidir con el contenedor y la alineará con el centro, se ajustará al tamaño más pequeño.
Altura mayor (ajuste al ancho)
Mismo ancho y altura.
ImageView ScaleType - FitXy
Escala la imagen usando FILL.
<ImageView android:layout_width="100dp"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:scaleType="fitXY"
android:layout_gravity="center"
android:background="@android:color/holo_orange_light"/>
Establecer el tipo de escala
Controla cómo se debe cambiar el tamaño de la imagen o moverla para que coincida con el tamaño de ImageView
.
Atributo XML:
android:scaleType="..."
Ilustraré diferentes tipos de escalas con un ImageView
cuadrado que tiene un fondo negro y queremos mostrar un dibujo rectangular en un fondo blanco en ImageView
.
<ImageView
android:id="@+id/imgExample"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#000"
android:src="@drawable/android2"
android:scaleType="..."/>
scaleType debe ser uno de los siguientes valores:
-
center
:center
la imagen en la vista, pero no realiza ninguna escala.
-
centerCrop
: escala la imagen de manera uniforme (mantiene la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o mayores que la dimensión correspondiente de la vista (menos el relleno). La imagen se centra entonces en la vista.
-
centerInside
: escala la imagen uniformemente (mantiene la relación de aspecto de la imagen) de modo que ambas dimensiones (ancho y alto) de la imagen sean iguales o menores que la dimensión correspondiente de la vista (menos el relleno). La imagen se centra entonces en la vista.
-
matrix
: Escala usando la matriz de la imagen al dibujar.
-
fitXY
: Escala la imagen usando FILL .
-
fitStart
: escala la imagen usando START .
-
fitCenter
: escala la imagen usando CENTRO .
-
fitEnd
: Escala la imagen usando END .
Establecer tinte
Establecer un color de tintado para la imagen. Por defecto, el tinte se SRC_ATOP
usando el modo SRC_ATOP
.
establecer tinte usando el atributo XML:
android:tint="#009c38"
Nota: debe ser un valor de color, en forma de "#rgb"
, "#argb"
, "#rrggbb"
o "#aarrggbb"
.
establecer tinte programáticamente:
imgExample.setColorFilter(Color.argb(255, 0, 156, 38));
y puedes borrar este filtro de color:
imgExample.clearColorFilter();
Ejemplo:
MLRoundedImageView.java
Copia y pega la siguiente clase en tu paquete:
public class MLRoundedImageView extends ImageView {
public MLRoundedImageView(Context context) {
super(context);
}
public MLRoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MLRoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
int w = getWidth(), h = getHeight();
Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0, 0, null);
}
public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap sbmp;
if (bmp.getWidth() != radius || bmp.getHeight() != radius) {
float smallest = Math.min(bmp.getWidth(), bmp.getHeight());
float factor = smallest / radius;
sbmp = Bitmap.createScaledBitmap(bmp, (int)(bmp.getWidth() / factor), (int)(bmp.getHeight() / factor), false);
} else {
sbmp = bmp;
}
Bitmap output = Bitmap.createBitmap(radius, radius,
Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xffa19774;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, radius, radius);
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(radius / 2 + 0.7f,
radius / 2 + 0.7f, radius / 2 + 0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);
return output;
}
}
Utilice esta clase en XML con el nombre del paquete en lugar de ImageView
<com.androidbuts.example.MLRoundedImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />