Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Animación individual – vistas múltiples

¿Hay alguna forma de animar múltiples vistas al mismo tiempo?

Lo que quiero hacer es traducir animaciones:

  • Cómo deshabilitar la corrección de hechizos mediante programación en android
  • ¿Rollo horizontal en textview en androide?
  • Cómo dibujar la forma de onda del reproductor de música de Android?
  • FFmpeg en Android
  • FirebaseRemoteConfig.fetch () no activa OnCompleteListener cada vez
  • Obtener referrer después de instalar la aplicación de Android Market
  • Tengo 5 TextViews y 4 tiras de color (plain RelativeLayouts con un fondo). Al inicio de las animaciones, los stips se apilan con TextViews en una fila horizontal. Al final quiero que todos los TextViews se apilen entre las tiras:

    Introduzca aquí la descripción de la imagen

    Este es un dibujo muy simple, pero demuestra lo que quiero hacer. ¿Hay alguna manera de hacer esto con animaciones, o tengo que usar animaciones de lienzo.

  • Determinar si la aplicación de Android es la primera vez que se utiliza
  • Transición de animación entre actividades mediante FLAG_ACTIVITY_CLEAR_TOP
  • Autenticación social de la API Web de ASP.NET para Web y Mobile
  • Error: Su proyecto contiene archivos C ++ pero no está utilizando un sistema de generación nativo compatible
  • Estilo de fondo del botón de radio de Android cuando está seleccionado
  • Error con el valor google_play_services_version de la biblioteca aar
  • 3 Solutions collect form web for “Animación individual – vistas múltiples”

    Cree sus objetos de animación, luego use startAnimation colectivamente en todas las vistas al mismo tiempo. Así que sería algo como esto:

     TranslateAnimation anim1; TranslateAnimation anim2; TranslateAnimation anim3; // Setup the animation objects public void startAnimations() { //... collect view objects view1.startAnimation(anim1); view2.startAnimation(anim2); view3.startAnimation(anim3); } 

    Sólo tenga en cuenta que las animaciones más que tiene en marcha a la vez, el más lento que va a ser.

    Puede utilizar ObjectAnimator para animar la vista múltiple de la siguiente manera:

     ArrayList<ObjectAnimator> arrayListObjectAnimators = new ArrayList<ObjectAnimator>(); //ArrayList of ObjectAnimators ObjectAnimator animY = ObjectAnimator.ofFloat(view, "y", 100f); arrayListObjectAnimators.add(animY); ObjectAnimator animX = ObjectAnimator.ofFloat(view, "x", 0f); arrayListObjectAnimators.add(animX); ... ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]); AnimatorSet animSetXY = new AnimatorSet(); animSetXY.playTogether(objectAnimators); animSetXY.setDuration(1000);//1sec animSetXY.start(); 

    He logrado compartir una única instancia de animación entre varias vistas. Al menos con una AlphaAnimation. Tenía un ListView y una animación que se debe aplicar a un niño particular de todas las vistas del artículo de la lista. En mi caso, debería haber sido posible que las vistas se "unieran" y "dejaran" la animación compartida en cualquier momento y no debería afectar otras vistas animadas de ninguna manera o interferir con la animación ya en ejecución. Para lograr esto tuve que hacer una copia ajustada de AlphaAnimation del android. Mi caso de uso es bastante especial, pero que sea aquí por si alguien tiene que lidiar con un objetivo similar con ListView.

     /** * This class is a copy of android's stock AlphaAnimation with two adjustments: * - fromAlpha, toAlpha and duration are settable at any time. * - reset() method can be blocked. Reason: view.setAnimation() calls animation's reset() method * which is not intended in our use case. * For every new list item view we call setAnimation once for it's life time * and animation should not be reset because it is shared by all list item views and may be in progress. */ public class MutableAlphaAnimation extends Animation { private float mFromAlpha; private float mToAlpha; private boolean resetBlocked; public MutableAlphaAnimation() { } public void start(float fromAlpha, float toAlpha, long duration) { mFromAlpha = fromAlpha; mToAlpha = toAlpha; setDuration(duration); setStartTime(START_ON_FIRST_FRAME); } public void setResetBlocked(boolean resetBlocked) { this.resetBlocked = resetBlocked; } @Override public void reset() { if (! resetBlocked) super.reset(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float alpha = mFromAlpha; t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime)); } @Override public boolean willChangeTransformationMatrix() { return false; } @Override public boolean willChangeBounds() { return false; } } 

    Para establecer esta animación en una vista:

      animation.setResetBlocked(true); view.setAnimation(animation); animation.setResetBlocked(false); 

    Y para iniciar una animación (previamente establecida por setAnimation) DOS cosas deben hacerse:

      animation.start(0.0f, 1.0f, FADE_IN_DURATION); 

    Y después de eso debe llamar manualmente invalidate () en cada vista afectada por la animación.

    La startAnimation () usual invalida () para usted, pero setAnimation no. (lea el comentario sobre el método View.setAnimation () en las fuentes de android).

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.