Mic*_*Bak 9 android android-5.0-lollipop activity-transition shared-element-transition
我遇到了一个关于ImageViewAndroid 5.0中的活动之间转换的奇怪问题/错误.
我试图从缩略图转换Fragment A(中Activity A)到的头部图像Fragment B(在Activity B).它大部分时间都运行良好,但它有时会轻微混乱.
这是一张它弄乱时的样子:

当然,它应该填满整个区域.两个ImageView都设置为ScaleType.CENTER_CROP,所以我无法想象这是问题.
令人好奇的是,该问题在滚动时立即自行修复Activity B(所有内容都包含在子类中ScrollView,ImageView在滚动时更改填充).
启动代码Activity B非常简单:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
activity, thumbImageView, "cover"); // "cover" is the shared element name for both ImageViews
ActivityCompat.startActivity(activity, intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
这是可观察的ScrollView侦听器的代码:
scrollview.setOnScrollChangedListener(new OnScrollChangedListener() {
@Override
public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) {
// Such parallax, much wow
headerImageView.setPadding(0, (int) (t / 1.5), 0, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
此外,这是我的主题风格的一部分:
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
尝试将以下代码添加到FragmentB 的onCreateView()方法中:
getActivity().postponeEnterTransition();
scrollView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
getActivity().startPostponedEnterTransition();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
当此代码存在时,问题仍然出现吗?这将确保过渡仅在片段完成布局后开始。
您甚至可能需要startPostponedEnterTransition()比这晚调用...例如,如果您在第二个活动中加载高分辨率图像,请尝试startPostponedEnterTransition在加载图像后调用(即将onPreDraw监听器设置ImageView在窗口的装饰视图上而不是) )。
| 归档时间: |
|
| 查看次数: |
2849 次 |
| 最近记录: |