2011-01-27 10 views
19

È possibile impostare e ottenere l'alfa/opacità di un layout e tutte le sue viste secondarie? Non sto parlando dello sfondo. Dì una collezione di controlli video come Play, Pause e Progressbar in un layout relativo.Imposta alfa/opacità del layout

Posso usare l'animazione per applicare la dissolvenza in apertura e in chiusura, ma volevo sapere se c'era un metodo diretto che potevo usare.

risposta

59

È possibile impostare l'alfa sul layout ed è figlio (o qualsiasi altra vista per quella materia) utilizzando l'opzione AlphaAnimation con durata 0 e setFillAfter.

Esempio:

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
// And then on your layout 
yourLayout.startAnimation(alpha); 

È possibile utilizzare uno di animazione per più componenti per risparmiare memoria. E resettare() per usare nuovamente, o clearAnimation() per eliminare alpha.

Anche se sembra rozzo e hackerato, in realtà è un buon modo per impostare alpha su set ov viste che non richiede molta memoria o tempo di processore.

Non sono sicuro di ottenere comunque il valore alfa corrente.

+0

Grazie. Stavo usando l'animazione, ma stavo impostando la visibilità dell'oggetto per passare una volta completata l'animazione invece di usare il metodo setFillAfter. –

+0

Sembra interrompere le animazioni (se eseguito durante l'animazione). Qualche correzione per questo? – Sufian

+0

Come soluzione alternativa, ho utilizzato un set di immagini semitrasparenti come sfondo di un 'View'. – Sufian

6

La soluzione di Alex funziona ma un altro modo è creare una vista personalizzata che chiama Canvas.saveLayerAlpha() prima di disegnare i suoi figli. Si noti che in Android 3.0 c'è un nuovo View.setAlpha() API :)

+0

Grazie, aspettiamo il metodo setAlpha. Qualcosa a cui sono più abituato da altre lingue. –

15

Qui è un metodo che funziona su tutte le versioni (thanks to @AlexOrlov):

@SuppressLint("NewApi") 
public static void setAlpha(View view, float alpha) 
{ 
    if (Build.VERSION.SDK_INT < 11) 
    { 
     final AlphaAnimation animation = new AlphaAnimation(alpha, alpha); 
     animation.setDuration(0); 
     animation.setFillAfter(true); 
     view.startAnimation(animation); 
    } 
    else view.setAlpha(alpha); 
} 

Chiaramente, per API inferiore a 11 se si è possibile creare una vista personalizzata che chiami prima di disegnare i propri figli (thanks to @RomainGuy).

+0

Questo è perfetto, grazie – Selecsosi

+0

Grazie Takhion. Aggiungi @SuppressLint ("NewApi") :) – Nifhel

+0

Usa: ViewCompat.setAlpha (Visualizza, float). – TomerBu

3

Ora è possibile utilizzare ViewCompat.setAlpha(View, float) per questa azione.

+0

Citazione da doc: "* Prima dell'API 11 ciò non ha alcun effetto. *" – Pang

+0

non esiste alcun metodo. Ho impostato il minimo api impostato su 11. Ma ha il metodo ViewCompat.getAlpha (anyView) –

0

Scusate per la mia risposta, ma se si desidera che l'alfa è possibile utilizzare il ViewCompat Classe

ViewCompat.setAlpha (Panorama vista, float alfa)

ViewCompat è nel appcompat v4

Problemi correlati