Возникли проблемы с переходом активности Android 5.0 на активность с помощью ViewPager

Итак, мы пытаемся создать сквозной переход изображения от изображения в ListView к изображению в галерее ViewPager. При выполнении этого перехода мы видим, как анимация происходит до того, как ViewPager заканчивает загрузку/рисование. Это заставляет изображение на ViewPager мигать, из-за чего анимация выглядит плохо.

В качестве теста мы поместили изображение поверх, чтобы имитировать внешний вид загружаемого ViewPager. Затем мы переходим от изображения в ListView к этому «фиктивному» ImageView, а затем скрываем его после завершения перехода. Это помогло, но по-прежнему не создавало гладкости, поскольку после того, как ViewPager заканчивал рисование, все начинало мигать.

Любые советы будут оценены!


person Steve C    schedule 17.12.2014    source источник


Ответы (2)


Основываясь на ответе Джорджа Маунта, вы можете попробовать добавить следующий код в вызываемый вами метод Activity onCreate():

postponeEnterTransition(); 
viewPager.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    public boolean onPreDraw() { 
        viewPager.getViewTreeObserver().removeOnPreDrawListener(this);
        startPostponedEnterTransition();
        return true;
    }
});
person Alex Lockwood    schedule 18.12.2014
comment
Если я хочу, чтобы анимация повторного входа запускалась, только если в данный момент открыт определенный фрагмент из ViewPager (в названии Activity), в противном случае просто используйте анимацию активности затухания по умолчанию, не могли бы вы предложить способ сделать это? - person DoruAdryan; 06.04.2015

Вот несколько идей:

Вы можете отложить переход до тех пор, пока действие ViewPager не будет готово, используя Activity.postponeEnterTransition() в действии ViewPager. Когда все будет готово к переходу, запустите Activity.startPostponedEnterTransition().

Если вы хотите, чтобы переход происходил быстрее, а изображения были похожи (а не обрезались по-разному), вы можете использовать снимок общего элемента и масштабировать его. Вы можете увидеть пример использования снимка здесь: https://halfthought.wordpress.com/2014/12/10/reveal-challenge/

Если изображение в вызывающем действии обрезано, но у вас есть необрезанное изображение, поддерживающее его (например, ImageView обрезает изображение), вы можете переопределить onCaptureSharedElementSnapshot в вызывающем действии, чтобы вернуть необрезанное растровое изображение в вызывающем действии. Затем в своей активности ViewPager вы можете использовать onCreateSharedElementSnapshot, чтобы выбрать это изображение для перехода.

person George Mount    schedule 18.12.2014