¿Cómo puedo cambiar la transparencia (alfa) de una vista en pre-SDK-11 en Android?

¿Cómo puedo cambiar la transparencia (alfa) de una vista en pre-SDK-11 en Android?

Antes de sugerir el uso de un color de fondo con cierta transparencia, tenga en cuenta que este método no incluye todos los elementos de la vista, como el texto de un botón o las vistas secundarias de un grupo de vistas.

EDIT – ejemplo a continuación se refiere a Android pre-SDK11, pero acabo de enterarme de una increíblemente grande biblioteca llamada Nine Old Androids , lo increíble que hace es habilitar todas las capacidades de animación de Android 3.0 para todas las versiones API!

Respuesta anterior

En realidad encontré este tipo de problema cuando quería establecer alfa dinámicamente en un diseño complejo. He creado una anulación de onSetAlpha() y agregó otra función recursiva que comprueba cada tipo de vista para la imagen de fondo, drawables y colores de texto.

  @Override public boolean onSetAlpha(int alpha) { return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo); } public boolean onSetAlpha(int alpha, View view) { if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i)); if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha); } } else if (view instanceof ImageView) { if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha); if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha); } else if (view instanceof TextView) { ((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha)); if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha); } else if (view instanceof EditText) { ((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha)); if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha); } return true; } 

Puede agregar otros tipos de vistas según sus necesidades.

Trate de usar una AlphaAnimation: http://developer.android.com/reference/android/view/animation/AlphaAnimation.html


/ * Tiene que utilizar la animación para obtener la tarjeta se desvaneció. * /

 AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F); alpha.setDuration(0); // Make animation instant alpha.setFillAfter(true); // Tell it to persist after the animation ends view.startAnimation(alpha); 

El ViewHelper de NineOldAndroids es lo que uso, es una clase auxiliar estática y una verdadera joya! Muchos aquí recomiendan NineOldAndroids pero no he visto ninguna mención del ViewHelper. Es realmente fácil de usar.

 import com.nineoldandroids.view.ViewHelper; ... ViewHelper.setAlpha(myView, .2f); 

También puede usarlo para establecer otras propiedades como x, y etc, muy útil al configurar animaciones o crear su interfaz de usuario. Muchas gracias a Jake Wharton por compartir su trabajo con la comunidad!

Puede ampliar el método de dibujo de vistas () y utilizar el método canvas.saveAlphaLayer ()

 public void draw(Canvas canvas) { canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG); super.draw(canvas); canvas.restore(); } 

Puede establecer Alfa en todos los colores de la vista (como el texto de un botón o las vistas secundarias de un grupo de vistas). Hacerlos en los colores xml y usarlos en todo View.

Puede leer los colores de la vista de forma recursiva y agregar alfa a ellos y volver a configurarlos.

Puede crear la vista como una vista principal de una nueva Actividad. Luego, haz lo mismo que en ¿Cómo puedo crear una actividad transparente en Android?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.