从一个活动的片段到另一个活动的片段的共享元素转换

4
我正在开发一个应用程序,目前在同一活动中的两个片段之间使用ImageView的内容过渡。虽然它工作正常,但我意识到我的目标片段需要有自己的活动。
假设我有包含片段1活动A和包含片段2活动B。我需要执行从片段1片段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());
}

Activity 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>

我在运行时没有看到任何内容过渡。正如我之前提到的,我已经在同一个活动的片段之间正确地进行了这个转换。值得注意的是,片段1是一个网格视图,所以我必须自己维护过渡名称以确保它们都是唯一的,这就是为什么你在运行时看到了setTransitionName调用的原因。
你有任何想法为什么我没有看到过渡效果吗?

我对Fragment的理解是它们允许在同一个Activity中展示不同的内容。如果Fragment不在同一个Activity中,你能否在它们之间进行转换呢? - Jack BeNimble
1个回答

3
在你的第二个活动中,在onCreate()内尝试使用postponeEnterTransition(),然后在你的片段中,在onViewCreated()中创建视图后使用yourActivity.startPostponedEnterTransition()
如果您使用的是AppCompat,请尝试使用supportPostponeEnterTransition()supportStartPostponedEnterTransition()ActivityCompat.postponeEnterTransition(yourActivity)ActivityCompat.startPostponedEnterTransition(yourActivity)
致谢: http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接