Android场景转换:自定义插值器?

7

我有一个使用场景转换和共享元素启动的活动,它可以正常工作。

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), sharedView, "sharedView");
Intent intent = new Intent(getActivity(), NewActivity.class);
ActivityCompat.startActivity(getActivity(), intent, options.toBundle());

该元素从旧活动平稳地过渡到新活动。但是,我想稍微改变一下过渡的动画效果,尤其是插值器。它似乎在使用默认的平滑插值器,但我想使用新的材料设计快出慢进插值器,并且我不知道如何指定。

我应该怎么做才能覆盖默认的过渡效果?


你为什么要使用ActivityOptionsCompat? - pskink
那我就不必检查API >= 21了。为什么? - Steven Schoen
那么,如果小于21岁的情况下没有进行转换,你不在意吗? - pskink
正确,这不是关键。 - Steven Schoen
尝试过Window.*Transition()吗? - pskink
这似乎不起作用:TimeInterpolator interpolator = AnimationUtils.loadInterpolator(this, android.R.interpolator.fast_out_slow_in); Window window = getWindow(); window.getSharedElementEnterTransition().setInterpolator(interpolator); window.getSharedElementExitTransition().setInterpolator(interpolator); window.getSharedElementReenterTransition().setInterpolator(interpolator); window.getSharedElementReturnTransition().setInterpolator(interpolator); - Steven Schoen
1个回答

5

如果你还没有明白:

/res/transition/中创建一个新的transitionSet,定义你的过渡标签和它们的属性和插值器,然后将其应用到/res/values-v21/styles.xml中的你的活动样式中。

以你的NewActivity为例

  • Create a new_activity_transition.xml inside /res/transition/ which contains the following example transition tags and their interpolators:

    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
        <changeImageTransform
            android:interpolator="@android:interpolator/fast_out_slow_in"
           />
        <arcMotion
            android:interpolator="@android:interpolator/fast_out_slow_in"/>
        <changeBounds
            android:duration="300"
            android:interpolator="@android:interpolator/fast_out_slow_in"/>
    </transitionSet>
    
  • Then set it as the shared element enter transition in your /res/values-v21/styles.xml:

    <style name="NewActivity">
        <item name="android:windowSharedElementEnterTransition">@transition/new_activity_transition</item>
    </style>
    
  • Don't forget to set the activity theme in your AndroidManifest.xml:

    <activity
          android:name="{path to}.NewActivity"
          android:theme="@style/NewActivity">
    </activity>
    

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