Круг Android показывает анимацию не плавно

я создаю логин и регистрацию на одной странице с анимацией круга, переключаю представление с помощью плавающей кнопки действия, это очень отстает при переключении одного представления на другое представление,

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

на вкладке (большой экран) он работает очень плавно (создаю два макета, один для мобильных устройств, а другой для вкладки), может ли кто-нибудь мне помочь.. это мой код..

 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void viewMenu() {

        if (!isOpen) {

//            int x = layoutContent.getRight();
//            int y = layoutContent.getBottom();
            int x = Math.round(fab.getX() + fab.getWidth() / 2);
            int y = Math.round(fab.getY() - fab.getHeight());
            int startRadius = 0;
            int endRadius = (int) Math.hypot(layoutMain.getWidth(), layoutMain.getHeight());

            fab.setBackgroundTintList(ColorStateList.valueOf(ResourcesCompat.getColor(getResources(),android.R.color.white,null)));
            fab.setImageResource(R.drawable.ic_cross);

            Animator anim = ViewAnimationUtils.createCircularReveal(layoutButtons, x, y, startRadius, endRadius);


            anim.setInterpolator(new AccelerateDecelerateInterpolator());
            layoutButtons.setVisibility(View.VISIBLE);
            anim.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animator) {
//                    fst_view.setVisibility(View.GONE);
                }

                @Override
                public void onAnimationEnd(Animator animator) {

                }

                @Override
                public void onAnimationCancel(Animator animator) {

                }

                @Override
                public void onAnimationRepeat(Animator animator) {

                }
            });
            anim.start();

            isOpen = true;

        } else {

//            int x = layoutButtons.getRight();
//            int y = layoutButtons.getBottom();
            int x = Math.round(fab.getX() + fab.getWidth() / 2);
            int y = Math.round(fab.getY() + fab.getHeight()/2) - toolbar.getHeight();
            int startRadius = Math.max(layoutContent.getWidth(), layoutContent.getHeight());
            int endRadius = 0;

            fab.setBackgroundTintList(ColorStateList.valueOf(ResourcesCompat.getColor(getResources(),R.color.colorAccent,null)));
            fab.setImageResource(R.drawable.ic_menu_camera);
//            fst_view.setVisibility(View.VISIBLE);
            Animator anim = ViewAnimationUtils.createCircularReveal(layoutButtons, x, y, startRadius, endRadius);


            anim.setInterpolator(new AccelerateDecelerateInterpolator());
            anim.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animator) {

                }

                @Override
                public void onAnimationEnd(Animator animator) {
                    layoutButtons.setVisibility(View.GONE);
                }

                @Override
                public void onAnimationCancel(Animator animator) {

                }

                @Override
                public void onAnimationRepeat(Animator animator) {

                }
            });
            anim.start();

            isOpen = false;
        }

    }

person Anushka    schedule 13.08.2018    source источник
comment
Не могли бы вы перефразировать свой вопрос, чтобы было более понятно, чего вы хотите достичь. Также, пожалуйста, постарайтесь улучшить качество вопросов, чтобы они были понятны другим пользователям.   -  person franiis    schedule 13.08.2018
comment
В большинстве случаев в основном потоке выполняется слишком много работы.   -  person grabarz121    schedule 13.08.2018
comment
я пробовал это нормально?. я тут новенькая..   -  person Anushka    schedule 13.08.2018
comment
вы не могли бы мне помочь   -  person Anushka    schedule 13.08.2018


Ответы (1)


Насколько я понимаю, вы можете использовать FastOutLinearInInterpolator() вместо AccelerateDecelerateInterpolator() и добавить anim.setDuration() с желаемой продолжительностью анимации. И установите layoutButtons.setVisibility() на View.INVISIBLE, как описано ниже в статье .

Кроме того, вы можете избавиться от Math.round() при вычислении координат вида x, y.

Это отлично сработало для моего случая.

Вот мой пример кода

person Egor Salenko    schedule 01.05.2019