更新:
在https://github.com/ulyssesp/SharedElementTransitions有一个重现。
这只发生在有一个保存转换 ImageView 的 DialogFragment 时,它只在某些时候发生。当它发生时,如果图像不在 DialogFragment 的底部但仍然可见,那么您可以看到图像的一部分被正确渲染。感觉就像是 DialogFragment 在 ImageView 之后(因此在其之上)呈现的竞争条件。
我正在尝试使用 Picasso 和缓存中的共享元素转换ImageView
来ScrollView
加载DialogFragment
图像。每隔一段时间,当ScrollView
滚动时,进入过渡时就会闪烁。
https://drive.google.com/file/d/0B9K_Hjcu9iFOV3lYNVB1UlpsNTQ/view?usp=sharing
最后点击上面的视频文件最能说明我在说什么。请注意,闪烁并非每次都发生,并且必须滚动滚动视图才能发生闪烁。实际项目中发生的事情还有很多,但这是一个重现错误的最小示例项目。
相关代码:
样式.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowSharedElementReenterTransition">@null</item>
<item name="android:windowSharedElementExitTransition">@null</item>
</style>
ImageFragment::onCreateView:
...
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityOptions activityOptions =
ActivityOptions.makeSceneTransitionAnimation(getActivity(), v, "image");
Intent i = new Intent(getActivity(), ImageDisplayActivity.class);
i.putExtra("url", "http://i.imgur.com/DvpvklR.png");
getActivity().startActivity(i, activityOptions.toBundle());
}
});
new Picasso.Builder(getActivity())
.memoryCache(MainActivity.sCache)
.build()
.load("http://i.imgur.com/DvpvklR.png")
.into(mImageView);
...
图像显示活动:
...
mImageView.setImageBitmap(MainActivity.sCache.get(getIntent().getStringExtra("url") + "\n"));
如果您有任何见解或需要更多信息,请告诉我!