Cómo implementar un android: ¿fondo que no se estira?

Encontré este gran hilo que describe cómo “comer el pastel y tenerlo también”, es decir, usar la imagen para un Button lugar de ImageButton (que no permite SetText() , cambiar el tamaño, etc.).

Esto se logra utilizando el atributo Ver:

 android:background="@drawable/bgimage" 

El único problema con esto es que estira la imagen para ajustarse al tamaño del botón.

Si no se codifica el tamaño de un botón fijo (¡en píxeles!), ¿Hay alguna forma de decirle a Android que no estire la imagen de fondo y que recorte o que la sature?

Debe usar ImageView si no desea que se extienda. Las imágenes de fondo siempre se estirarán para adaptarse a la vista. Debe configurarlo como Drawable para forzar el aspecto de la imagen al objeto.

De lo contrario, si te apegas a la idea del botón, necesitarás forzar la escala en el botón para evitar que la imagen se estire.

Tal como en tu

 OnCreate(Bundle bundle) { //set content layout, etc up here //now adjust button sizes Button B = (Button) findViewById(R.id.somebutton); int someDimension = 50; //50pixels B.setWidth(someDimension); B.setHeight(someDimension); } 

Puede crear un bitmap xml y usarlo como fondo para la vista. Para evitar el estiramiento puede especificar android:gravity atributo de android:gravity .

por ejemplo:

    

Hay muchas opciones que puede usar para personalizar la representación de la imagen

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

Simplemente usar ImageButton lugar de Button soluciona el problema.

  

y puedes establecer

 android:background="@null" 

para eliminar el fondo del botón si lo desea.

Arreglo rapido !! 🙂

Estoy usando un ImageView en RelativeLayout que se superpone con mi diseño normal. No se requiere código Ajusta la imagen a la altura máxima de la pantalla (o cualquier otro diseño que use) y luego recorta la imagen hacia la izquierda y hacia la derecha para ajustarse al ancho. En mi caso, si el usuario gira la pantalla, la imagen puede ser un poco demasiado pequeña. Por lo tanto, uso match_parent, que hará que la imagen se estire en ancho si es demasiado pequeña.

      

Tuve el mismo problema: solo debería usar una imagen de 9 parches (.9.png) en lugar de su imagen original.

Sarga

Utilice draw9patch … incluido dentro de las herramientas SDK de Android Studio. Puede definir las áreas extensibles de su imagen. Las piezas importantes están restringidas y la imagen no se ve completamente deformada. Una buena demo en dra9patch está AQUÍ

Utilice draw9patch para cambiar su splash.png existente en new_splash.9.png, arrastre new_splash.9.png en la carpeta del proyecto drawable-hdpi, asegúrese de que AndroidManifest y styles.xml sean los correctos como se indica a continuación:

AndroidManifest.xml:

  

styles.xml:

  

Tenía una imagen de fondo, no de gran tamaño, pero con dimensiones extrañas, por lo tanto, el estiramiento y el mal rendimiento. Hice un método con parámetros Contexto, una Vista y una ID dibujable (int) que coincidirá con el tamaño de la pantalla del dispositivo. Use esto en, por ejemplo, Fragments onCreateView para establecer el fondo.

 public void setBackground(Context context, View view, int drawableId){ Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),drawableId); bitmap = Bitmap.createScaledBitmap(bitmap, Resources.getSystem(). getDisplayMetrics().widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels, true); BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), bitmap); view.setBackground(bitmapDrawable); } 

Aquí hay una versión de la respuesta de Santosh para botones creados por progtwigción, sin la necesidad de una configuración XML separada:

 Button button = new Button(getContext()); Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_button); BitmapDrawable backgroundDrawable = new BitmapDrawable(getResources(), backgroundBitmap); backgroundDrawable.setGravity(Gravity.CENTER); // also LEFT, CENTER_VERTICAL, etc. backgroundDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP)); button.setBackground(backgroundDrawable); 

Incluí la línea ColorFilter ya que funciona de forma algo diferente a los botones con una imagen de fondo normal.

La clave es establecer el dibujable como la imagen del botón, no como fondo. Me gusta esto:

 rb.setButtonDrawable(R.drawable.whatever_drawable); 

Uno puede usar un ImageView simple en su xml y hacer que se pueda hacer clic (android: clickable = “true”)? Solo tiene que usar como src una imagen que tiene forma de botón, es decir, esquinas redondeadas.

Puede usar FrameLayout con un ImageView como primer hijo, luego su distribución normal como segundo hijo: