Android Consigue las dimensiones de Image en ImageButton
¿Existe alguna manera de obtener las dimensiones de la imagen que se establecen actualmente en ImageButton
? Estoy tratando de lograr esto.
Tengo un ImageButton
con una imagen predeterminada de 36 x 36. A continuación, seleccione una imagen de tamaño decir 200 x 200. Quiero llamar algo así como:
- Cómo obtener Image Resource
- Cómo eliminar la imagen de fondo estándar de ImageButton?
- cambiar la imagen del botón de imagen hasta que se presione
- Deshabilitar un ImageButton
- Cómo obtener la imagen de un ImageButton?
imageButton.setImageBitmap(Bitmap.createScaledBitmap( bitmap, 36, 36, true));
Para reducir la imagen a 36 x 36. Razón por la que quiero obtener el tamaño de la imagen original es para atender a hdpi, mdpi y ldpi por lo que puede establecer las dimensiones del mapa de bits a 36 x 36, 24 x 24 y 18 x 18 respectivamente antes ImageButton
al ImageButton
. ¿Algunas ideas?
Oh hombre, tengo la respuesta después de jugar al azar con el código:
imageButton.getDrawable().getBounds().height(); imageButton.getDrawable().getBounds().width();
- Android - imagen diferente para rollover en ImageButton
- ¿Cómo puedo cambiar las imágenes en un ImageButton en Android cuando uso un OnTouchListener?
- ImageButton en Android con fondo transparente
- ImageButton change src
- Imagebutton imagen completa, esquinas redondas
- Establecer el texto en ImageButton
- Iterate a través de ImageButtons dando enfoque a Android
- Obtener recursos de un fragmento
Pruebe este código –
imageButton.getDrawable().getBounds().height(); imageButton.getDrawable().getBounds().width();
La respuesta de Maurice no funcionó para mí, ya que con frecuencia obtendría 0 de nuevo, lo que resulta en una Excepción que se arroja siempre que intenta generar el mapa de bits a escala:
IllegalArgumentException: width y height deben ser> 0
He encontrado algunas otras opciones si ayuda a alguien más.
Opción 1
El imageButton
es una View
que significa que podemos obtener el LayoutParams
y aprovechar las propiedades de altura y anchura incorporadas. Encontré esto de esta otra respuesta .
imageButton.getLayoutParams().width; imageButton.getLayoutParams().height;
opcion 2
Haga que nuestro imageButton
venga de una clase que extienda ImageButton
, y después substituya View # onSizeChanged .
Opción 3
Obtenga el rectángulo de dibujo en la vista y utilice los métodos width()
y height()
para obtener las dimensiones:
android.graphics.Rect r = new android.graphics.Rect(); imageButton.getDrawingRect(r); int rectW = r.width(); int rectH = r.height();
Combinación
Mi código final terminó combinando los tres y seleccionando el máximo. Estoy haciendo esto porque obtendré resultados diferentes, dependiendo de la fase en que se encuentre la aplicación (como cuando la vista no ha sido completamente dibujada).
int targetW = imageButton.getDrawable().getBounds().width(); int targetH = imageButton.getDrawable().getBounds().height(); Log.d(TAG, "Calculated the Drawable ImageButton's height and width to be: "+targetH+", "+targetW); int layoutW = imageButton.getLayoutParams().width; int layoutH = imageButton.getLayoutParams().height; Log.e(TAG, "Calculated the ImageButton's layout height and width to be: "+targetH+", "+targetW); targetW = Math.max(targetW, layoutW); targetH = Math.max(targetW, layoutH); android.graphics.Rect r = new android.graphics.Rect(); imageButton.getDrawingRect(r); int rectW = r.width(); int rectH = r.height(); Log.d(TAG, "Calculated the ImageButton's getDrawingRect to be: "+rectW+", "+rectH); targetW = Math.max(targetW, rectW); targetH = Math.max(targetH, rectH); Log.d(TAG, "Requesting a scaled Bitmap of height and width: "+targetH+", "+targetW); Bitmap scaledBmp = Bitmap.createScaledBitmap(bitmap, targetW, targetH, true);
- ¿Hay alguna forma de forzar a IntentService a no ser recreado?
- ¿Cómo puedo detectar cuándo una página WebView intenta cerrar?