¿Cómo puedo configurar el valor alfa de una vista completa en el nivel 7 de api (Android 2.1)

Tengo una opinión arbitraria que quiero desvanecerse en la parte superior de otra vista. En api nivel 11 veo que hay un setAlpha, pero estoy atascado apoyando api nivel 7. No he corrido a través de una manera sencilla de hacer esto. ¿Cómo puedo configurar el alpha para toda la vista sin jugar con cada componente individual?

Debería ser capaz de lograr un efecto razonable usando una AlphaAnimation en el API nivel 7.

View v = findViewById(R.id.view2); AlphaAnimation aa = new AlphaAnimation(0f,1f); aa.setDuration(5000); v.startAnimation(aa); 

El uso de AlphaAnimation sería una excelente solución para la mayoría de las transiciones, y sin duda habría funcionado para mí si no podía encontrar una manera de hacer exactamente lo que estaba tratando de hacer, lo que implica el desvanecimiento entre dos puntos de vista de una manera graduada basada en la inclinación Ángulo del dispositivo. Afortunadamente tengo! Aquí está la estrategia que tomé: envolví la vista en una subclase personalizada de FrameLayout, e implementé onDraw. Allí, capturé la vista secundaria como un mapa de bits, y luego volví a dibujar el mapa de bits con el alfa previsto. Aquí hay un código. Voy a editar cuando me limpian, esto es sólo una prueba de concepto, pero funciona como un encanto:

 public class AlphaView extends FrameLayout { private int alpha = 255; public AlphaView(Context context) { super(context); setWillNotDraw(false); } public AlphaView(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); } public AlphaView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setWillNotDraw(false); } public void setCustomAlpha(int alpha) { if (this.alpha != alpha) { this.alpha = alpha; invalidate(); } } public int getCustomAlpha() { return alpha; } @Override protected void onDraw(Canvas canvas) { for(int index = 0; index < getChildCount(); index++ ) { View child = getChildAt(index); child.setVisibility(View.INVISIBLE); child.setDrawingCacheEnabled(true); Bitmap bitmap = child.getDrawingCache(true); bitmap = Bitmap.createBitmap(bitmap); child.setDrawingCacheEnabled(false); Paint paint = new Paint(); paint.setAlpha(alpha); canvas.drawBitmap(bitmap, 0, 0, paint); } } } 

Dependerá del tipo de vista.

Para un TextView, en xml podría tener estos atributos:

 android:background="#00000000" android:textColor="#77FFFFFF" 

Los dos primeros números son los valores alfa de 00 a FF (en hexadecimal). El fondo sería totalmente transparente, mientras que el texto sería blanco y parcialmente transparente. No he probado esto, pero debería funcionar.

Si usted tiene un fondo que es una imagen, entonces la cosa más fácil de hacer sería pre-crear su png dibujable con transparencia.

  • Transparencia hexagonal en colores
  • OpenGL ES 2.0 PNG canal alfa
  • Imagen de png que aparece con fondo gris en android
  • El tema translúcido no funciona cuando se programa mediante programación en Android 2.3.3 o 4.2
  • Asegúrese de que el área del mapa de bits sea transparente al tocar -> de nuevo
  • Lienzo transparente de Android (vista de superficie)
  • Barra de navegación translúcida Lollipop (fitsSystemWindows = "true")
  • Escena de OpenGL con fondo transparente + widgets nativos por debajo y por encima
  • ¿Cómo abrir la actividad transparente de UnityPlayerActivity?
  • Error: Theme.Translucent & FLAG_ACTIVITY_REORDER_TO_FRONT
  • Vista superficial en capas en un FrameLayout en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.