在DialogFragment上使用Lollipop的Transition API

时间:2015-08-16 16:58:09

标签: android android-dialogfragment android-transitions

我一直在阅读有关如何实现Lollipop的Transition动画以在活动和碎片之间无缝移动的多个来源。

尽管如此,我似乎无法使用DialogFragment

这是我迄今为止所做的尝试:

  • Activity1主持ListView中的项目列表。在其onCreate()方法中,我发出了启用转换的请求:

    @Override protected void onCreate(final Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        getWindow().setSharedElementExitTransition(TransitionInflater.from(this)
            .inflateTransition(R.transition.change_bounds_shared_element));
    
    ...
    
  • 我以可以听取点击事件的方式构建(并分配)自定义适配器 并被告知有哪些项目被点击以及它被点击 View。我用这些信息来构成我的过渡(设置 TransitionName和诸如此类的东西:

    ...
    
    @Override public void onCardClicked(final View view, final Card card) {
    
        view.setTransitionName("rootLayout");
    
        final CardDetailsFragment fragment = CardDetailsFragment.newInstance(card);
        fragment.setSharedElementEnterTransition(TransitionInflater.from(CardFlowActivity.this)
            .inflateTransition(R.transition.change_bounds_shared_element));
    
    ...
    
  • 最后,我打电话来展示我的CardDetailsFragment,正如您应该猜到的那样,DialogFragment来自fragment.show(getSupportFragmentManager(), "detailed_card_view_" + card.getId());

    DialogFragment
但是,唉,它并没有像我期望的那样发挥作用。对于默认的淡入淡出节目,甚至没有任何动画保存。

我错过了什么吗?或者public class LocaleUtils { private static Locale sLocale; public static void setLocale(Locale locale) { sLocale = locale; if(sLocale != null) { Locale.setDefault(sLocale); } } public static void updateConfig(ContextThemeWrapper wrapper) { if(sLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Configuration configuration = new Configuration(); configuration.setLocale(sLocale); wrapper.applyOverrideConfiguration(configuration); } } public static void updateConfig(Application app, Configuration configuration) { if (sLocale != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { //Wrapping the configuration to avoid Activity endless loop Configuration config = new Configuration(configuration); // We must use the now-deprecated config.locale and res.updateConfiguration here, // because the replacements aren't available till API level 24 and 17 respectively. config.locale = sLocale; Resources res = app.getBaseContext().getResources(); res.updateConfiguration(config, res.getDisplayMetrics()); } } } 的性质是否可以与新的Transition API一起使用?

0 个答案:

没有答案