介绍
Android L中引入的共享元素转场很好,但一般情况下由list到详情页中的共享元素比如是ImageView,PhotoView等需要网络加载的图片时,可能跳转到详情页面就没有效果,国内找多文章没有这解决这方面的文章,今天google一上午解决了。就是转场开始的Activity需要延时。
描述
这里用A,B代表两个Activity,Activity可以包含Fragment,都是可以实现。
解决的就是A->B无明显效果,B-A有效果的情况。
解决办法
1. 首先在B Activity中setContentView后调用
// Postpone the shared element enter transition.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
postponeEnterTransition();
}
或者使用supportPostponeEnterTransition();
,对就的源码其中与方面一样
public static void postponeEnterTransition(Activity activity) {
if (Build.VERSION.SDK_INT >= 21) {
ActivityCompatApi21.postponeEnterTransition(activity);
}
}
2. 在Activity或者Fragment中获取网络或者加载一个错误图片后设置Activity的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
startPostponedEnterTransition();
}
或者supportStartPostponedEnterTransition();
建议在Activity设置一个函数,然后Fragment在合适的时候调用这个Activity的函数。
public void scheduleStartPostponedTransition(final View sharedElement) {
sharedElement.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
sharedElement.getViewTreeObserver().removeOnPreDrawListener(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
startPostponedEnterTransition();
supportStartPostponedEnterTransition();
}
return true;
}
});
}
文后有大量详细讲解Android L Activity Transition,有时间可以读一读。
参考文档
Goolge Official Transition
Code Path Android Guide
Getting Started with Activity & Fragment Transitions
Using shared element transitions in activities and fragments