2011-10-19 1 views
8

Sto affrontando un errore piuttosto interessante ma fastidioso, nel mio layout lineare ho nascosto un altro layout lineare usando il margine in negativo e quando l'utente seleziona un tipo da un elenco porto il layout in primo piano utilizzando Translational Animation l'errore è che il layout viene di fronte hanno un testo di modifica che diventa morto e quando faccio scorrere (il mio layout principale è circondato dalla vista di scorrimento) diventa vivo e quando smetto di scorrere diventa di nuovo morto ... ho davvero fallito nel giudicare perché sta succedendo così ragazzi aiuto ....EditText si ferma dopo l'animazione e torna attivo sullo scorrimento ......?

Ho anche incollato link del video qui sotto che mostra questo comportamento fastidioso di mia app

http://www.dailymotion.com/video/xlskk8_android-app-edit-text-error_tech

mio layout xml vista interna di scorrimento è

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginLeft="10dip" 
android:layout_marginRight="10dip" 
android:layout_marginTop="-110dip" 
android:layout_marginBottom="5dip" 
android:id="@+id/notes_editor" 
android:orientation="vertical" 
> 
<EditText 
android:id="@+id/enter_note" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:maxLines="2" 
android:lines="2"> 
</EditText> 
<Button 
android:id="@+id/save_note" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="Save" /> 

</LinearLayout> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="-10dip" 
android:id="@+id/notes_list" 
android:orientation="vertical" 
> 
</LinearLayout> 

</LinearLayout> 

il layout lineare vuoto pulsante in basso viene utilizzato per aggiungere in modo dinamico bambino visualizzazioni tutte le altre cose sta eseguendo la loro funzionalità correttamente, solo il testo di modifica che mostra questo comportamento anomalo.

il codice utilizzato per l'animazione è al di sotto

public void animateEditor() 
{ 
     slider = new TranslateAnimation(0, 0, 0,180); 
     slider.setDuration(1250); 
     slider.setFillAfter(true); 
     notes_list.startAnimation(slider); 
     notes_editor.startAnimation(slider); 
} 

risposta

23

Il problema qui è stato quando si applica slider.setFillAfter(true); il codice anima l'immagine di Vista, ma non l'attuale Visualizzazioni Ecco perché quando li vedo dopo scivolare animazione erano (EditText e salva il pulsante) bloccati o puoi dire morti e non ascoltando i loro eventi perché le Viste reali erano lì dietro il layout e davanti era solo la loro immagine

La soluzione che ho trovato per quel problema è applicare il seguente codice:

slider.setFillAfter(false); 
slider.setFillBefore(false); 
// OR you can directly write 
slider.setFillEnabled(false); 

E poi sono viste reali sul nuovo posto impostando animazione ascoltatore e utilizzando il seguente metodo:

public void onAnimationEnd(Animation a) 

Posizionamento delle viste nuova posizione alla fine dell'animazione utilizzando metodo di cui sopra. E qui arriva ancora un altro problema di lampeggiamento che è dovuto al problema nel metodo del listener dell'animazione android che è che viene chiamato prima che l'animazione finisca e causi l'effetto lampeggiante, una soluzione difficile è mettere la seguente riga di codice in prima linea del metodo public void onAnimationEnd(Animation a).

// in my case animation applied to notes_editor so the code will be 
notes_editor.clearAnimation(); 
+0

Sto lavorando su trascinando e droping voglio sostenere che l'animazione fino l'azione verso il basso si chiama ma l'impostazione fillafter essere falso andare indietro immideately Potete aiutarmi ??? –

+0

Come ho descritto, devi utilizzare il listener dell'animazione per la tua animazione in cui il metodo onAnimationEnd (Animation a) verrà chiamato quando termina l'animazione e in quel momento dovresti mettere la tua vista nella nuova posizione in cui dovrebbe essere dopo l'animazione. SetFillAfter (true) significa semplicemente mantenere l'immagine della vista alla fine dell'animazione, mentre durante l'animazione la sua giusta immagine della vista che viene animata non è la vista con la funzionalità completa, quindi il fillafter posizionerà l'immagine della vista in un nuovo luogo ma non nel suo touch bounds –

+0

Questo ha funzionato quasi per me, ma presentava ancora uno sfarfallio occasionale, soprattutto su un vecchio sistema operativo Android. Ho scoperto che ritardando gli aggiornamenti del layout ha risolto il problema. Ad esempio, usa un costrutto layout.post (Runnable). –