2011-11-02 4 views
5

Ho una barra degli strumenti allineata nella parte inferiore e una WebView sopra di essa, che riempie l'altezza rimanente. Ora voglio far scorrere verso il basso la barra degli strumenti per nasconderlo, e mentre si sta animando l'altezza della webview dovrebbe espandersi. Ho provato ad utilizzare TranslateAnimation ma sfortunatamente non modifica la reale posizione della barra degli strumenti, ma solo i suoi contenuti vengono spostati. Ecco quello che ho provato:Animazione slide down Android

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" 
    android:toXDelta="0%" 
    android:fromYDelta="0%" 
    android:toYDelta="100%" 
    android:duration="700" 
    android:fillAfter="true" /> 

E il codice vero e proprio:

final View v = findViewById(R.id.browseToolbar); 
Animation animation = AnimationUtils.loadAnimation(someContext, R.anim.toolbar_hide); 
v.startAnimation(animation); 

Come posso fare?

risposta

1

Ho scritto del codice per eseguire animazioni di ridimensionamento reali. Date un'occhiata:

http://www.touchlab.co/blog/resize-animation/

un'occhiata anche a una presentazione che ho fatto su di animazione Android

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

In sostanza, come già detto, le classi di animazione regolari riguardano solo ciò che è a loro avviso genitore. La chiave per comprenderli è che non sono "reali". Pensa all'animazione Android come a un miraggio. Se esegui l'app di esempio che ho creato, ad esempio esegui un'animazione in scala e riduci un pulsante, se fai clic all'esterno, dove il pulsante USATO è, registra ancora come un clic del pulsante. Le animazioni Android non influenzano effettivamente i limiti e le dimensioni reali.

Ciò che il codice nel mio post del blog fa, in sostanza, è implementare un ViewGroup.OnHierarchyChangeListener. Quando roba viene aggiunta/rimossa dalla gerarchia, il contenitore anima un ridimensionamento fisico.

+4

http://touchlab.co/blog/resize-animation/ link non funzionante – NetStarter

0

Quando si utilizza l'animazione Android, solo i pixel della vista vengono spostati. Per spostare effettivamente la vista, è necessario aggiungere un listener di animazione all'oggetto di animazione e sovrascrivere il metodo onAnimationEnd. In questo metodo è necessario spostare la vista in modo programmatico.

AnimationListener animListener = new AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation arg0) {}    
    @Override 
    public void onAnimationRepeat(Animation arg0) {}     
    @Override 
    public void onAnimationEnd(Animation arg0) { 
     Move the view here   
    } 
}; 

animation.setAnimationListener(animListener);