2011-10-19 9 views
8

Me enfrento a un error bastante interesante pero molesto, en mi diseño lineal he ocultado otro diseño lineal usando margen en negativo y cuando el usuario selecciona un tipo de una lista traigo el diseño al frente usando Translational Animation el error es que el diseño viene al frente tiene un texto de edición que se convierte en muerto y cuando me desplazo (mi diseño principal está rodeado por la vista de desplazamiento) cobra vida y cuando dejo de desplazarme se vuelve a morir ... realmente no pude juzgar por qué está sucediendo así chicos por favor ayuda ....EditText stucks después de la animación y vivo de nuevo en el desplazamiento ......?

también he pegado abajo mostrando este comportamiento molesto de mi aplicación de enlace de vídeo

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

mi diseño xml dentro de la vista de desplazamiento es

<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> 

la disposición lineal vacía debajo de botón se utiliza para añadir dinámicamente niño ve todas las otras cosas están realizando su función correctamente, sólo la edición de texto que muestra este comportamiento anormal.

el código utilizado para la animación está por debajo

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

Respuesta

23

El problema aquí fue cuando se aplica slider.setFillAfter(true); el código anima la imagen de vistas, pero no los reales Vistas Por eso, cuando los veo después de deslizarse por la animación que eran (EditText y botón de guardar) atascado o puede decir muerto y no escuchando sus eventos porque las Vistas reales estaban allí detrás del diseño y al frente era solo su imagen

La solución que encontré para ese problema es aplicar el siguiente código:

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

Y a continuación, para mostrar vistas reales en el nuevo lugar de escucha mediante el establecimiento de animación y utilizando el método siguiente:

public void onAnimationEnd(Animation a) 

La colocación de los puntos de vista a la nueva posición al final de la animación usando el método anterior. Y aquí todavía viene otro problema de parpadeo que se debe al problema en el método de escucha de la animación android que es que se llama antes de que la animación finalice y causa un efecto parpadeante, una solución difícil es poner la siguiente línea de código en la primera línea del método public void onAnimationEnd(Animation a).

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

Estoy trabajando en arrastrar y soltar Deseo mantener esa animación hasta que se llame a la acción de abajo, pero al configurar de nuevo para que sea falso, vuelve de nuevo, ¿puedes ayudar? –

+0

Como lo describí, debe usar un oyente de animación para su animación en el que se llame al método AnimationEnd (Animación a) cuando termine su animación y en ese momento debe colocar su vista en la nueva posición donde debería estar después de la animación. SetFillAfter (true) significa simplemente retener la imagen de vista al final de la animación, ya que durante la animación su imagen de la vista que está siendo animada no la vista con funcionalidad completa, entonces la imagen posterior colocará la imagen de la vista en un nuevo lugar pero no Toque los límites –

+0

Esto casi funcionó para mí, pero todavía tenía el parpadeo ocasional, especialmente en el sistema operativo Android anterior. Descubrí que al retrasar las actualizaciones del diseño, resolvía el problema. es decir, utilice una construcción layout.post (Runnable). –

Cuestiones relacionadas