El método de animación applyTransformation no se activa hasta que haga clic en cualquier diseño
Esto es tan raro, tengo este código de animación:
public class ExpandAnimation extends Animation { private View mAnimatedView; private MarginLayoutParams mViewLayoutParams; private int mMarginStart, mMarginEnd; private boolean mWasEndedAlready = false; /** * Initialize the animation * @param view The layout we want to animate * @param duration The duration of the animation, in ms */ public ExpandAnimation(View view, int duration) { setDuration(duration); mAnimatedView = view; mViewLayoutParams = (MarginLayoutParams) view.getLayoutParams(); mMarginStart = mViewLayoutParams.rightMargin; mMarginEnd = (mMarginStart == 0 ? (0- view.getWidth()) : 0); view.setVisibility(View.VISIBLE); mAnimatedView.requestLayout(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); if (interpolatedTime < 1.0f) { // Calculating the new bottom margin, and setting it mViewLayoutParams.rightMargin = mMarginStart + (int) ((mMarginEnd - mMarginStart) * interpolatedTime); // Invalidating the layout, making us seeing the changes we made mAnimatedView.requestLayout(); // Making sure we didn't run the ending before (it happens!) } else if (!mWasEndedAlready) { mViewLayoutParams.rightMargin = mMarginEnd; mAnimatedView.requestLayout(); mWasEndedAlready = true; } } }
Y yo uso esta animación:
- Android Support BottomSheetBehavior no puede ser dinámico?
- Android Fragments ¿Debo reutilizar 1 fragmento o crear nuevas instancias?
- Android - Navegación personalizada
- Haciendo que EditText y Button tengan la misma altura en Android
- El botón recortado no recibe la entrada táctil
View parent = (View) v.getParent(); View containerMenu = parent.findViewById(R.id.containerMenu); ExpandAnimation anim=new ExpandAnimation(containerMenu, 1000); containerMenu.startAnimation(anim);
Esta animación alterna una presentación que muestra / hidding.
Por defecto, está oculto. Cuando hago clic, la animación funciona y se muestra. Cuando vuelvo a hacer clic, se encoge correctamente. Pero la tercera vez, no hace nada. He depurado y descubrí que el constructor se llama pero no applyTransformation
. De alguna manera, si hago clic en cualquier diseño alrededor de la pantalla, la animación se inicia repentinamente.
¿Alguna idea?
Editar ¿Alguien sabe CUÁNDO se aplica applicationTransformation?
- ¿Cómo usar Anko DSL dentro de un Fragmento?
- Documentación para estilos en recursos de Android
- ¿Cómo incrustar un diseño dentro de otro en mi caso?
- ¿Es posible guardar layout_weight en un xml?
- ¿Cuál es la diferencia entre los métodos invalidate () y postInvalidate () de Android?
- Cómo cambiar los iconos de los iconos del menú de navegación y desbordamiento de la barra de herramientas (appcompat v7)?
- Texto de la columna multi de Android
- Mostrar mi actividad en lugar de la pantalla estándar para llamadas entrantes
No puedo entender por qué, pero cuando hago clic o hago cualquier acción a cualquier diseño, la animación finalmente empieza. Así que programatically agregó una solución. Tengo un scrollview en mi disposición, así que muevo la posición de la voluta:
hscv.scrollTo(hscv.getScrollX()+1, hscv.getScrollY()+1);
Esto justo después de containerMenu.startAnimation(anim);
Esto sólo funciona, no puedo entender por qué.
Además, descubrí que algunas animaciones funcionaron impecablemente en android> 4, pero en 2.3 por ejemplo, tenía el mismo problema, trabajaba para expandir, y encogerse, pero no para expandirse por segunda vez.
parent.invalidate();
Hicimos el truco.
- Envoltura de texto uniforme en TextView
- ¿Cómo hacer que el marcador aparezca en el centro de la ventana inicial de Google Map?