【问题标题】:Shared Element Transition from fragment to fragment on new activity在新活动上从片段到片段的共享元素转换
【发布时间】:2015-09-03 08:48:46
【问题描述】:

我正在开发一个应用程序,该应用程序当前使用ImageView 上的内容转换,在同一活动上从一个片段到另一个片段。它工作正常,但是我意识到我的目标片段需要有自己的活动。

假设我有 Activity A,其中包含 Fragment 1 我有 Activity B,其中包含 Fragment 2。 我需要执行从 Fragment 1Fragment 2 的共享元素转换。

这是我到目前为止所做的: 在从 Fragment 1 到 Activity A 的回调方法中,我传递了选定的实体以及我想要转换的图像视图。

活动 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>

我没有看到运行时发生任何内容转换。正如我之前提到的,我在同一个活动中从一个片段到另一个片段的转换工作正常。 另外值得注意的是,片段 1 是一个网格视图,所以我必须自己维护转换名称,所以它们都是唯一的,这就是为什么你会在运行时看到 setTransitionName 调用。

知道为什么我没有看到过渡运行吗?

【问题讨论】:

  • 我对 Fragment 的理解是,它们允许在同一个 Activity 中进行不同的显示。如果它们不在同一个活动中,您可以在片段之间进行转换吗?

标签: android android-fragments material-design android-transitions


【解决方案1】:

onViewCreated() 中创建视图后,尝试在onCreate() 中的第二个活动中使用postponeEnterTransition() 和片段中的yourActivity.startPostponedEnterTransition()

如果您使用的是 AppCompat,请尝试使用 supportPostponeEnterTransition()supportStartPostponedEnterTransition()ActivityCompat.postponeEnterTransition(yourActivity)ActivityCompat.startPostponedEnterTransition(yourActivity)

归功于: http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2016-11-30
    相关资源
    最近更新 更多