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


Ver animaciones en Android Colapsar / Expandir vistas en LinearLayout

Añadí imágenes de forma dinámica a mi diseño lineal,

Quiero lograr

  • Android Studio - excepción mergeDebugResources
  • Descargar archivo dentro de WebView
  • ¿Alguien puede explicar OAuth?
  • Creación de la aplicación de soporte para varias pantallas Android
  • Especificación de la memoria RAM del Android Market en el manifiesto
  • Iniciar AlarmManager si se reinicia el dispositivo
  • Introduzca aquí la descripción de la imagen

    Aquí está el código de ejemplo lo que he hecho

    Actividad principal

    package ksp.com.animationssample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { private Button btn_expand; private Button btn_collapse; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_expand = (Button) findViewById(R.id.btn_expand); btn_collapse = (Button) findViewById(R.id.btn_collapse); LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); final LinearLayout layout = (LinearLayout) findViewById(R.id.imageLayout); for (int i = 0; i < 3; i++) { final ImageView image = new ImageView(MainActivity.this); image.setLayoutParams(vp); if (i == 0) image.setImageDrawable(getResources().getDrawable(R.drawable.item_image1)); else image.setImageDrawable(getResources().getDrawable(R.drawable.item_image2)); if (i == 2) image.setVisibility(View.VISIBLE); else image.setVisibility(View.GONE); layout.addView(image); } btn_expand.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { expandOrCollapse(layout.getChildAt(2), true, layout.getChildAt(0).getHeight() + layout.getChildAt(1).getHeight()); expandOrCollapse(layout.getChildAt(1), true, layout.getChildAt(0).getHeight()); expandOrCollapse(layout.getChildAt(0), true, 0); } }); btn_collapse.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { expandOrCollapse(layout.getChildAt(0), false, 0); expandOrCollapse(layout.getChildAt(1), false, layout.getChildAt(0).getHeight()); expandOrCollapse(layout.getChildAt(2), false, layout.getChildAt(0).getHeight() + layout.getChildAt(1).getHeight()); } }); } public void expandOrCollapse(final View v, boolean is_expand, final int animheight) { TranslateAnimation anim = null; if (is_expand) { anim = new TranslateAnimation(0.0f, 0.0f, -animheight, 0.0f); v.setVisibility(View.VISIBLE); Animation.AnimationListener expandedlistener = new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } }; anim.setAnimationListener(expandedlistener); } else { anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, -animheight); Animation.AnimationListener collapselistener = new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { v.setVisibility(View.GONE); } }; anim.setAnimationListener(collapselistener); } anim.setDuration(1500); anim.setInterpolator(new AccelerateInterpolator(0.5f)); v.startAnimation(anim); } } 

    Activity_mainn.xml

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" android:background="@android:color/holo_blue_dark" tools:context="ksp.com.animationssample.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:id="@+id/btn_expand" android:text="Expand" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn_collapse" android:text="Collopse"/> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical"> <LinearLayout android:layout_width="match_parent" android:id="@+id/imageLayout" android:gravity="center" android:orientation="vertical" android:layout_height="wrap_content"> </LinearLayout> <!--android:animateLayoutChanges="true"--> </ScrollView> </RelativeLayout> 

    Cuando hago clic en Expandir botón en la primera vez no se muestra la animación de la segunda vez que está funcionando.

    Habilitar Visible el elemento después de hacer clic en el botón de contracción .

    Qué hacer a continuación : Cuando he seleccionado cualquier elemento de vista que tiene que mostrar la animación de selección, a continuación, colapso de la animación, después de colapso que tiene que aparecer como vista superior como menciono en la imagen anterior. Actualmente soy código duro la cuenta de las vistas y escribí animaciones estáticas para cada vista con alturas estáticas de animaciones ie ( expandOrCollapse(view, height_of_view) )

    Busco un rato para esto, pero no hay suerte.

    Sigo la expansión / colapso de Expand y suavizar / expandir, pero no pueden ayudarme a expandir todas las vistas en el diseño Lineal.

    ¿Podemos hacer esto Las vistas de la lista son la opinión del reciclador o algo?

    Para el ahorro de tiempo He añadido mi muestra a git hub puedes probarlo Animation Sample Github

    Sugíeme, por favor.

  • Eliminar espaciado o relleno en android Spinner
  • Creación de Android Gradle con subproyectos
  • Plugin ADT para Android no aparece en Eclipse
  • Android Map V2 - ¿Por qué MAPS_RECEIVE permiso?
  • Vistas circulares personalizadas
  • ¿Cómo detectar un fabricante de dispositivos móviles y un modelo mediante programación en Android?
  • 2 Solutions collect form web for “Ver animaciones en Android Colapsar / Expandir vistas en LinearLayout”

    He hecho una clase separada para ella. Compruebe si funciona para usted:

     public class DropDownAnim extends Animation { private final int targetHeight; private final View view; private final boolean down; public DropDownAnim(View view, int targetHeight, boolean down) { this.view = view; this.targetHeight = targetHeight; this.down = down; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int newHeight; if (down) { newHeight = (int) (targetHeight * interpolatedTime); } else { newHeight = targetHeight - (int) (targetHeight * interpolatedTime);//(int) (targetHeight * (1 - interpolatedTime)); } view.getLayoutParams().height = newHeight; view.requestLayout(); view.setVisibility(down ? View.VISIBLE : View.GONE); } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override public boolean willChangeBounds() { return true; } } 

    Mientras trabajaba con esto. Para expandir

     public void expand(final View v) { final int targetHeight = getResources().getDimensionPixelSize(R.dimen.notification_height);//v.getMeasuredHeight(); DropDownAnim a = new DropDownAnim(v,targetHeight,true); a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density)); a.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // Your code on end of animation } @Override public void onAnimationRepeat(Animation animation) { } }); v.setVisibility(View.INVISIBLE); v.startAnimation(a); } 

    Para el colapso:

     public void collapse(final View v) { final int targetHeight = v.getMeasuredHeight(); DropDownAnim a = new DropDownAnim(v, targetHeight, false); a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density)); a.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // Your code on end of animation } @Override public void onAnimationRepeat(Animation animation) { } }); v.startAnimation(a); } 

    Trate de no ocultar la vista de destino (ahora se establece la visibilidad GONE para todas las vistas después del final de la animación colapsada) y haga lo siguiente:

     targetView.bringToFront(); targetView.invalidate(); targetView.getParent().requestLayout(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.