使用ViewPager将共享元素从Activity转换为Fragment

时间:2017-09-10 07:05:40

标签: android android-fragments android-transitions

我在我的活动中使用此代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        view.setTransitionName("pic");

    ActivityOptionsCompat a=ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context,view,view.getTransitionName());

    Intent i3=new Intent(context,MovieInfo.class);
    i3.putExtra("id",view.getId());
    startActivity(i3,a.toBundle());
    }

并在我的片段类中使用此

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

        getActivity().getWindow().setSharedElementExitTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.shared_element_transition));
    }
} 

我也尝试在主要活动中使用它但不能实现共享元素转换但是当我回到我的活动转换时运行良好意味着剩下的代码很好!
任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要在styles.xml

中的App主题中启用windowContentTrasition
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <!-- Customize your theme here. -->
  <item name="android:windowContentTransitions">true</item>
  .
  .
</style>

接下来将相同的transitionName属性添加到两个布局中的共享元素

android:transitionName="transition_name"

在您的活动中创建一个像这样的意图

ActivityOptionsCompat options = ActivityOptionsCompat.
    makeSceneTransitionAnimation(this, view, "transition_name");

Intent intent = new Intent(this, MovieInfo.class); 
startActivity(intent, options.toBundle());