Почему анимация работает только при исчезновении в представлениях пунктов меню? (Не работает, когда исчезает) - PullRequest
0 голосов
/ 10 мая 2019

В моем приложении есть панель действий с 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);
}
...