Android добавляет простые анимации, а setvisibility (view.Gone)

Я разработал простой макет. Я закончил дизайн без анимации, но теперь хочу добавить анимацию при событии clickview, и я не знаю, как его использовать. Был ли мой xml-дизайн хорошо выглядеть или нет? Мы ценим любые предложения.

Мой XML

<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:longClickable="false" android:orientation="vertical" android:weightSum="16" > <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#00DDA0" android:layout_weight="3" > </LinearLayout> <TextView android:id="@+id/Information1" android:layout_width="match_parent" android:layout_height="1dp" android:text="Child Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="8.5" android:background="#BBBBBB" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information2" android:layout_width="match_parent" android:layout_height="0dp" android:text="Parent Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout2" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information3" android:layout_width="match_parent" android:layout_height="0dp" android:text="Siblings" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout3" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information4" android:layout_width="match_parent" android:layout_height="0dp" android:text="Teacher Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout4" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView4" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information5" android:layout_width="match_parent" android:layout_height="0dp" android:text="Grade Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout5" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView5" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information6" android:layout_width="match_parent" android:layout_height="0dp" android:text="Health Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout6" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView5" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" android:layout_weight="8.5" /> </LinearLayout> </LinearLayout> 

Моя java

 public class Certify_Info extends Activity { private static TextView tv2,tv3,tv5,tv6,tv4,tv1; private static LinearLayout l1,l2,l3,l4,l5,l6; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_certify__info); tv1=(TextView) findViewById(R.id.Information1); tv2=(TextView) findViewById(R.id.Information2); tv3=(TextView) findViewById(R.id.Information3); tv4=(TextView) findViewById(R.id.Information4); tv5=(TextView) findViewById(R.id.Information5); tv6=(TextView) findViewById(R.id.Information6); l1=(LinearLayout) findViewById(R.id.layout1); l2=(LinearLayout) findViewById(R.id.layout2); l3=(LinearLayout) findViewById(R.id.layout3); l4=(LinearLayout) findViewById(R.id.layout4); l5=(LinearLayout) findViewById(R.id.layout5); l6=(LinearLayout) findViewById(R.id.layout6); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); tv1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l1.setVisibility(View.VISIBLE); } }); tv2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l2.setVisibility(View.VISIBLE); } }); tv3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l3.setVisibility(View.VISIBLE); } }); tv4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l4.setVisibility(View.VISIBLE); } }); tv5.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l6.setVisibility(View.GONE); l5.setVisibility(View.VISIBLE); } }); tv6.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.VISIBLE); } }); } } 

Solutions Collecting From Web of "Android добавляет простые анимации, а setvisibility (view.Gone)"

Вы можете сделать две вещи, чтобы добавить анимацию, сначала вы можете позволить изменениям анимированного анимирования для Android. Таким образом, каждый раз, когда вы меняете что-то в макете, как изменение видимости видимости или позиции представления, андроид автоматически создает анимацию постепенного перехода / перехода. Чтобы использовать этот набор

 android:animateLayoutChanges="true" 

На корневом узле в вашем макете.

Второй вариант – это вручную добавить анимацию. Для этого я предлагаю вам использовать новый API анимации, представленный в Android 3.0 (Honeycomb). Я могу привести несколько примеров:

Это уменьшает View :

 view.animate().alpha(0.0f); 

Это исчезает в:

 view.animate().alpha(1.0f); 

Это перемещает View вниз по высоте:

 view.animate().translationY(view.getHeight()); 

Это возвращает View в исходное положение после его перемещения в другое место:

 view.animate().translationY(0); 

Вы также можете использовать setDuration() для установки продолжительности анимации. Например, это затухает в течение 2 секунд:

 view.animate().alpha(0.0f).setDuration(2000); 

И вы можете комбинировать столько анимаций, сколько хотите, например, это уменьшает View и перемещает его одновременно в течение 0,3 секунды:

 view.animate() .translationY(view.getHeight()) .alpha(0.0f) .setDuration(300); 

И вы также можете назначить слушателя анимации и реагировать на всевозможные события. Например, когда начинается анимация, когда она заканчивается или повторяется и т. Д. Используя абстрактный класс AnimatorListenerAdapter вам не нужно сразу выполнять все обратные вызовы AnimatorListener но только те, которые вам нужны. Это делает код более читаемым. Например, следующий код исчезает из View перемещает его по высоте в течение 0,3 секунды (300 миллисекунд), и когда анимация завершена, его видимость установлена ​​на View.GONE .

 view.animate() .translationY(view.getHeight()) .alpha(0.0f) .setDuration(300) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view.setVisibility(View.GONE); } }); 

Проверьте эту ссылку. Это позволит анимации, такие как анимации L2R, R2L, T2B, B2T.

Этот код показывает анимацию слева направо

 TranslateAnimation animate = new TranslateAnimation(0,view.getWidth(),0,0); animate.setDuration(500); animate.setFillAfter(true); view.startAnimation(animate); view.setVisibility(View.GONE); 

Если вы хотите сделать это из R2L, используйте

 TranslateAnimation animate = new TranslateAnimation(0,-view.getWidth(),0,0); 

Сверху вниз как

 TranslateAnimation animate = new TranslateAnimation(0,0,0,view.getHeight()); 

И наоборот.

Основываясь на ответе @Xaver Kapeller, я выяснил способ создания анимации прокрутки, когда на экране появляются новые представления (а также анимация, чтобы скрыть их).

Это происходит из этого состояния:

  • кнопка
  • Последняя кнопка

в

  • кнопка
  • Кнопка 1
  • Кнопка 2
  • Кнопка 3
  • Кнопка 4
  • Последняя кнопка

и наоборот.

Таким образом, когда пользователь нажимает на первую кнопку, элементы «Button 1», «Button 2», «Button 3» и «Button 4» появятся с использованием анимации затухания, и элемент «Последняя кнопка» будет двигаться вниз до конца. Высота макета также изменится, позволяя правильно просматривать прокрутку.

Это код для отображения элементов с анимацией:

 private void showElements() { // Precondition if (areElementsVisible()) { Log.w(TAG, "The view is already visible. Nothing to do here"); return; } // Animate the hidden linear layout as visible and set // the alpha as 0.0. Otherwise the animation won't be shown mHiddenLinearLayout.setVisibility(View.VISIBLE); mHiddenLinearLayout.setAlpha(0.0f); mHiddenLinearLayout .animate() .setDuration(ANIMATION_TRANSITION_TIME) .alpha(1.0f) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); updateShowElementsButton(); mHiddenLinearLayout.animate().setListener(null); } }) ; mLastButton .animate() .setDuration(ANIMATION_TRANSITION_TIME) .translationY(mHiddenLinearLayoutHeight); // Update the high of all the elements relativeLayout LayoutParams layoutParams = mAllElementsRelativeLayout.getLayoutParams(); // TODO: Add vertical margins layoutParams.height = mLastButton.getHeight() + mHiddenLinearLayoutHeight; } 

И это код, чтобы скрыть элементы анимации:

 private void hideElements() { // Precondition if (!areElementsVisible()) { Log.w(TAG, "The view is already non-visible. Nothing to do here"); return; } // Animate the hidden linear layout as visible and set mHiddenLinearLayout .animate() .setDuration(ANIMATION_TRANSITION_TIME) .alpha(0.0f) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Log.v(TAG, "Animation ended. Set the view as gone"); super.onAnimationEnd(animation); mHiddenLinearLayout.setVisibility(View.GONE); // Hack: Remove the listener. So it won't be executed when // any other animation on this view is executed mHiddenLinearLayout.animate().setListener(null); updateShowElementsButton(); } }) ; mLastButton .animate() .setDuration(ANIMATION_TRANSITION_TIME) .translationY(0); // Update the high of all the elements relativeLayout LayoutParams layoutParams = mAllElementsRelativeLayout.getLayoutParams(); // TODO: Add vertical margins layoutParams.height = mLastButton.getHeight(); } 

Обратите внимание, что есть простой хак в методе, чтобы скрыть анимацию. В прослушивателе анимации mHiddenLinearLayout мне пришлось удалить сам прослушиватель, используя:

 mHiddenLinearLayout.animate().setListener(null); 

Это связано с тем, что как только прослушиватель анимации присоединяется к представлению, в следующий раз, когда в этом представлении выполняется любая анимация, слушатель также будет выполнен. Это может быть ошибкой в ​​прослушивателе анимации.

Исходный код проекта находится на GitHub: https://github.com/jiahaoliuliu/ViewsAnimated

Счастливое кодирование!

Обновление : для любого прослушивателя, прикрепленного к представлениям, его следует удалить после окончания анимации. Это делается с помощью

 view.animate().setListener(null);