Ajustar imagen en ImageButton en Android

Tengo 6 ImageButton en mi actividad, establecí imágenes a través de mi código en ellas (sin usar xml).

Quiero que cubran el 75% del área del botón. Pero cuando algunas imágenes cubren menos área, algunas son demasiado grandes para caber en el imageButton. ¿Cómo cambiar el tamaño programáticamente y mostrarlos? Debajo está la captura de pantalla

enter image description here a continuación está el archivo xml

               

y un fragmento de myClass.java:

 public void addImageButtons() { iB_topleft = (ImageButton) findViewById(R.id.button_topleft); iB_topright = (ImageButton) findViewById(R.id.button_topright); iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft); iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright); iB_next = (ImageButton) findViewById(R.id.button_next); iB_repeat = (ImageButton) findViewById(R.id.button_repeat); } public void setImageNextAndRepeat() { iB_topleft .setImageResource(R.drawable.aa); iB_topright.setImageResource(R.drawable.bb); iB_bottomleft.setImageResource(R.drawable.cc); iB_bottomright.setImageResource(R.drawable.dd); iB_next.setImageResource(R.drawable.next); iB_repeat.setImageResource(R.drawable.repeat); } 

Quiero que cubran el 75% del área del botón.

Use android:padding="20dp" (ajuste el relleno según sea necesario) para controlar cuánto ocupa la imagen del botón.

pero mientras algunas imágenes cubren menos área, algunas son demasiado grandes para caber en el imageButton. ¿Cómo cambiar el tamaño programáticamente y mostrarlos?

Utilice un android:scaleType="fitCenter" para que Android android:scaleType="fitCenter" las imágenes, y android:adjustViewBounds="true" para que ajusten sus límites debido a la escala.

Todos estos atributos se pueden establecer en código en cada ImageView en tiempo de ejecución. Sin embargo, es mucho más fácil de configurar y previsualizar en xml en mi opinión.

Además, no use sp para nada que no sea el tamaño del texto, se escala según la preferencia de tamaño de texto que establezca el usuario, por lo que sus dimensiones sp serán más grandes de lo previsto si el usuario tiene una configuración de texto “grande”. Use dp lugar, ya que no está escalado por la preferencia de tamaño de texto del usuario.

Aquí hay un fragmento de cómo debe verse cada botón:

   

Botón de muestra

Estoy usando el siguiente código en xml

 android:adjustViewBounds="true" android:scaleType="centerInside" 

Intenta usar android:scaleType="fitXY" en i-Imagebutton xml

Estoy usando android:scaleType="fitCenter" con satisfacción.

Consulte el enlace a continuación e intente encontrar lo que realmente desea:

ImageView.ScaleType CENTER Centre la imagen en la vista, pero no realice escalas.

ImageView.ScaleType CENTER_CROP Escale la imagen de manera uniforme (mantenga la relación de aspecto de la imagen) para que ambas dimensiones (ancho y alto) de la imagen sean iguales o mayores que la dimensión correspondiente de la vista (menos relleno).

ImageView.ScaleType CENTER_INSIDE Escale la imagen de manera uniforme (mantenga la relación de aspecto de la imagen) para que ambas dimensiones (ancho y alto) de la imagen sean iguales o menores que la dimensión correspondiente de la vista (menos relleno).

ImageView.ScaleType FIT_CENTER Escala la imagen usando CENTER.

ImageView.ScaleType FIT_END Escala la imagen usando END.

ImageView.ScaleType FIT_START Escala la imagen usando START.

ImageView.ScaleType FIT_XY Escala la imagen usando FILL.

ImageView.ScaleType MATRIX Scale usando la matriz de imagen al dibujar.

https://developer.android.com/reference/android/widget/ImageView.ScaleType.html

Recientemente, descubrí por accidente que, dado que tienes más control en un ImageView que puedes configurar un onclicklistener para una imagen, aquí hay una muestra de un botón de imagen creado dinámicamente

 private int id; private bitmap bmp; LinearLayout.LayoutParams familyimagelayout = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT ); final ImageView familyimage = new ImageView(this); familyimage.setBackground(null); familyimage.setImageBitmap(bmp); familyimage.setScaleType(ImageView.ScaleType.FIT_START); familyimage.setAdjustViewBounds(true); familyimage.setId(id); familyimage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //what you want to do put here } }); 

Funcionó bien en mi caso. Primero, descarga una imagen y la renombra como icono, la ubica en la carpeta dibujable. Puede cambiar el tamaño configurando android:layout_width o android:layout_height . Finalmente, tenemos