Android: slideUp y slideDown de views

Este código lo usé hace un par de años y lo tenía como borrador en el panel de WordPress porque supongo que en su día quería escribir algo, acabo de darme cuenta y por eso lo publico.

Con él se pueden preparar acordeones o zonas de información adicional que en primera instancia estén ocultas, por ejemplo. Me gustaría poder escribir algo más sobre esto, pero en realidad es suficientemente sencillo, tanto el código como el concepto, así que no puedo decir gran cosa : )

public static void slideDown(final View v) {
    v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    final int targetHeight = v.getMeasuredHeight();

    // En versiones anteriores a la 21, si el alto es < 1 se detiene la animación:
    v.getLayoutParams().height = 1;

    v.setVisibility(View.VISIBLE);

    Animation a = new Animation(){
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            v.getLayoutParams().height = interpolatedTime == 1 ? ViewGroup.LayoutParams.WRAP_CONTENT : (int)(targetHeight * interpolatedTime);
            v.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    int dps = (int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density);

    a.setInterpolator(new AccelerateDecelerateInterpolator());
    a.setDuration(4 * dps);
    v.startAnimation(a);
}
public static void slideUp(final View v) {
    final int initialHeight = v.getMeasuredHeight();

    Animation a = new Animation(){
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            if(interpolatedTime == 1){
                v.setVisibility(View.GONE);
            }else{
                v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
                v.requestLayout();
            }
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    int dps = (int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density);

    a.setInterpolator(new AccelerateDecelerateInterpolator());
    a.setDuration(4 * dps);

    v.startAnimation(a);
}



Josep Viciana

Programador de 28 años con una década de experiencia como programador. interesado en el diseño, ilustración y nuevas tecnologías. Dedicado desde siempre a la programación Web y desde hace algunos años también a la móvil.

1 comentario

buenas noches queria saber si me podias ayudaren una aplicacion que estoy creando necesito saber como puedo hcer una llamada desde la aplicacion utilizando una imagen butoon en este caso la imagen seria un microfono donde podemos decir una palabra clave y que en automatico haga la llamada

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *