Как я могу плавно перевести просмотр вверх и за пределы экрана с помощью анимации? - PullRequest
1 голос
/ 22 июля 2011

Представьте, что у вас есть этот макет:

___________________________________________
|                                         |
|                                         |
|               TOP CONTENT               |
|                                         |
|_________________________________________|
|                                         |
|                                         |
|                 BOTTOM                  |
|                 CONTENT                 |
|                                         |
|_________________________________________|

Я хочу сдвинуть верхний контент с экрана, что я могу успешно сделать с помощью анимации перевода (определенной в XML).У меня есть слушатель, настроенный так, чтобы в конце анимации видимость TOP CONTENT была установлена ​​на View.GONE.Моя проблема в том, что во время выполнения анимации область, которую занимает TOP CONTENT, остается на экране.НИЖЕ СОДЕРЖАНИЕ не скользит с ним.По сути, в течение тех 500 мс, в течение которых выполняется анимация, BOTTOM CONTENT остается на своей позиции, а затем резко сдвигается вверх после завершения анимации.

Как сделать так, чтобы BOTTOM CONTENT поддерживал свой параметр layout_below с помощьюнижний край TOP CONTENT и плавно прокручивается с TOP CONTENT?Требуется ли для использования ДРУГОГО КОНТЕНТА другая анимация?

Спасибо за любую помощь!

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Просто идея:

Попробуйте поиграть с makeInAnimation(Context c, boolean fromLeft) и makeOutAnimation(Context c, boolean toRight).

Изначально они предназначены для скольжения вправо / влево, но вы можете переопределить их или выполнить преобразование анимации по умолчанию.

Также убедитесь, что вы используете AnimationSet .

Это обеспечит одновременное воспроизведение обеих анимаций.

Надеюсь, это помогло!

источник: http://developer.android.com/reference/android/view/animation/AnimationUtils.html

1 голос
/ 22 июля 2011

Требуется ли для использования ДРУГОГО КОНТЕНТА другая анимация?

Обычно я так делаю, и все отлично работает.

0 голосов
/ 03 июля 2016

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

private int heightOfScreen;

   @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        configureLayoutListener();
    }

private void configureLayoutListener() {
        mNormalModelayoutContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                heightOfScreen = mNormalModelayoutContainer.getHeight();
                ViewTreeObserver viewTreeObserver = mNormalModelayoutContainer.getViewTreeObserver();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    viewTreeObserver.removeOnGlobalLayoutListener(this);
                } else {
                    viewTreeObserver.removeGlobalOnLayoutListener(this);
                }
            }
        });
    }

    private void animate() {
        View viewToShiftOut = mNormalModelayoutContainer;
        View viewToShiftIn = mEditModelayoutContainer;
        ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "y", 0, -heightOfScreen/2);
        ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "y", heightOfScreen/2, 0);
        outAnim.setDuration(1000);
        inAnim.setDuration(1000);
        outAnim.start();
        inAnim.start();
    }

Это работает для фрагмента, но может быть адаптировано для любого вида или вида деятельности.N / B: - Обратите внимание, как и откуда мы измеряем высоту - Виды входа и выхода движутся в противоположных направлениях, но их можно заставить двигаться в любом направлении компаса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...