В моем приложении есть панель действий с 3 элементами (индекс: 0, 1, 2), которые по умолчанию установлены в android:visible=false
в xml, когда отображается фрагмент карты, 2 просмотра элементов (индекс: 1 и 2) из меню исчезают с помощью анимации, и это работает хорошо.
Тогда у меня также есть вложенный фрагмент, который появляется перед моим фрагментом карты каждый раз, когда долго щелкается окно информационного текста маркера.
НО Каждый раз, когда отображается этот фрагмент, я хочу скрыть / скрыть эти 2 пункта меню из панели действий и показать оставшийся пункт меню (0) также с анимацией.(Это не работает)
исчезновение в элементе 0 работает хорошо, также исчезает элемент 1, но элемент 2 остается без изменений, даже когда я закомментирую строку, где элемент 1 исчезает, элемент 1 исчезает!и пункт 2 остается без изменений, что очень странно.
Когда всплывающий фрагмент закрыт, происходит обратное действие: элементы 1 и 2 исчезают, а элемент 0 исчезает, это также работает довольно хорошо!
Я впервые работаю с анимацией, поэтому я действительно не могу понять, почему анимация не работает только в этом случае, я надеюсь, что кто-то может мне помочь.
То, как я использую обработчики, я получил здесь из ответа здесь на stackoverflow, но больше не могу найти ссылку, извините.
*inside map fragment*
boolean openingPopUp=false;
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (openingPopUp) {
openingPopUp = false;
changeFavIcon(menu);
} else {
final MenuItem cero, uno, dos;
cero=menu.getItem(0);
uno=menu.getItem(1);
dos=menu.getItem(2);
if (cero.isVisible()) {//when returning from popUp frag
//fadeout popUp fav icon(works)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
animation.setFillEnabled(true);
animation.setFillAfter(true);
animation.setDuration(1000);
getActivity().findViewById(R.id.action_popupfav).startAnimation(animation);
}
}, 1);
//disappear view after animation (works)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
cero.setVisible(false);
}
}, 1000); // The animation is finished after 1000ms
//fade in views(works)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(1000);
// Make item visible and start the animation
uno.setVisible(true);
dos.setVisible(true);
getActivity().findViewById(R.id.action_favs).startAnimation(animation);
getActivity().findViewById(R.id.action_notifications).startAnimation(animation);
}
}, 1);
} else {//First time we open app
//fade in views (this works)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(1000);
// Make item visible and start the animation
uno.setVisible(true);
dos.setVisible(true);
getActivity().findViewById(R.id.action_favs).startAnimation(animation);
getActivity().findViewById(R.id.action_notifications).startAnimation(animation);
}
}, 1);
}
}
}
private void changeFavIcon(Menu menu) {
final MenuItem cero, uno, dos;
cero=menu.getItem(0);
uno=menu.getItem(1);
dos=menu.getItem(2);
//fade out views(THIS DOESNT WORK)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
animation.setFillEnabled(true);
animation.setFillAfter(true);
animation.setDuration(1000);
uno.setVisible(true);
dos.setVisible(true);
getActivity().findViewById(R.id.action_notifications).startAnimation(animation);
getActivity().findViewById(R.id.action_favs).startAnimation(animation);//<-this is the only one executing, even if commented out!
}
}, 1);
// //set visible false for views after animation(works)
/* new Handler().postDelayed(new Runnable() {
@Override
public void run() {
uno.setVisible(false); //This method is commented out to see that only one animation is executing
dos.setVisible(false);
}
}, 1000); // The animation is finished after 1000ms
*/
//fade in view(works)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(1000);
// Make item visible and start the animation
cero.setVisible(true);
getActivity().findViewById(R.id.action_popupfav).startAnimation(animation);
}
}, 1);
}