我正在处理一个应用程序,该应用程序当前在ImageView
上使用同一活动中从一个片段到另一个片段的内容转换。它工作正常,但我意识到我的目标片段需要拥有它自己的活动。
所以,让我们说活动A 包含片段1 我有活动B ,其中包含片段2 。 我需要执行从 Fragment 1 到 Fragment 2 的共享元素转换。
以下是我到目前为止所做的事情: 在从片段1到活动A的回调方法中,我传递了所选实体以及我想要转换的imageview。
活动A
@Override
public void OnPhotographSelected(Photograph selectedPhoto,ImageView image) {
Intent i= new Intent(this, PhotoDetailActivity.class);
i.putExtra("photo_OBJ", selectedPhoto);
i.putExtra("transitionName", image.getTransitionName());
startActivity(i, ActivityOptions.makeSceneTransitionAnimation(this, image, "mainPhoto").toBundle());
}
活动B
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_detail);
Photograph photoObj=new Photograph();
Bundle b = getIntent().getExtras();
String transitionName="";
if(b!=null)
{
photoObj=(Photograph)b.getSerializable("photo_OBJ");
transitionName=b.getString("transitionName");
}
PhotoDetailFragment pdf = PhotoDetailFragment.newInstance(photoObj);
pdf.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
pdf.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
pdf.setImageTransitionId(transitionName);
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.photo_detail_content, pdf);
trans.commit();
}
片段2
mainImg.setTransitionName(mImageTransitionID);
活动主题
<item name="android:windowActivityTransitions">true</item>
我没有看到在运行时发生任何内容转换。正如我之前提到的,我在同一活动中从片段到片段正确地进行了这种转换。 另外值得注意的是,Fragment 1是一个gridview,所以我必须自己维护transitionNames所以它们都是唯一的,这就是你在运行时看到setTransitionName调用的原因。
任何想法,为什么我没有看到过渡运行?
答案 0 :(得分:2)
在postponeEnterTransition()
中创建视图后,尝试在您的片段中的onCreate()
和yourActivity.startPostponedEnterTransition()
内的第二个活动中使用onViewCreated()
。
如果您使用 AppCompat ,请尝试supportPostponeEnterTransition()
和supportStartPostponedEnterTransition()
或ActivityCompat.postponeEnterTransition(yourActivity)
和ActivityCompat.startPostponedEnterTransition(yourActivity)
。