Intereting Posts
Android Studio – Robolectric: android.content.res.Resources $ NotFoundException: нет такой метки com.my.app:string/app_name Регистрация UP / CANCEL из диалогового окна при запуске события DOWN из LongPress View Adb соединение по tcp не работает сейчас Преобразование результатов Sqllite Cursor в мой объект Как обращаться с несколькими входами и сессиями социальных сетей Поток на Android? Что может вызвать StaleDataException, кроме преждевременного вызова cursor.close ()? Android – возврат к предыдущему действию с различным значением Intent Как мы можем создать iPhone-подобных прядильщиков в андроиде? Градиентная синхронизация не удалась по идее 13.1.1 Android Studio / Intellij Idea: «Оглавление» для класса Очистка сеанса пользователя Facebook в Webview Как создать кнопку изображения в Android? Не удалось импортировать новый проект Gradle в андроид-студию Подключение localhost через android – Соединение с 10.0.2.2 отказано Разделение столбцов в GridLayoutManager приложения Android Recyclerview

Просмотр анимаций в Android Collapse / Expand Views в LinearLayout

Я добавил динамически изображения для моей линейной компоновки,

Я хочу достичь

Введите описание изображения здесь

Вот пример кода, что я сделал

Основная деятельность

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> 

Когда я нажимаю кнопку « Свернуть» , в первый раз не отображается анимация со второго раза, когда она работает.

Enable Видимый элемент после нажатия кнопки свернуть .

Что делать дальше : когда я выбрал какой-либо элемент View, он должен показать анимацию выбора, а затем свернуть анимацию, после краха она должна появиться как верхний вид, как я упоминал в изображении выше. В настоящее время я жестко expandOrCollapse(view, height_of_view) количество просмотров и написал статические анимации для каждого представления со статическими высотами анимаций, т. expandOrCollapse(view, height_of_view) )

Я искал какое-то время для этого, но не повезло.

Я следую Vie expand / collapse и плавно расширяется / сворачивается, но они не могут помочь мне расширить все виды в линейном макете.

Можем ли мы сделать этот просмотр в списках – это вид ресайклера или что-то еще?

Для экономии времени Я добавил свой пример в git-концентратор, вы можете попробовать его. Animation Sample Github

Предложите мне, пожалуйста.

Solutions Collecting From Web of "Просмотр анимаций в Android Collapse / Expand Views в LinearLayout"

Я сделал для него отдельный класс. Проверьте, работает ли оно для вас:

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

Во время работы с этим. Для расширения

 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); } 

Для краха:

 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); } 

Попытайтесь не скрывать свой целевой вид (теперь вы устанавливаете видимость GONE для всех просмотров после свернутого конца анимации) и выполните следующее:

 targetView.bringToFront(); targetView.invalidate(); targetView.getParent().requestLayout();