ActivityOptions.makeSceneTransitionAnimation似乎不存在

时间:2014-07-01 19:11:23

标签: android android-5.0-lollipop

Android L引入了新的动画功能:在不同活动中的类似视图之间进行动画制作。它记录了here

我已尝试使用ActivityOptions.makeSceneTransitionAnimation,但它似乎在SDK中(或在jar中)可见,所以我尝试使用反射,它返回一个空值。

还有其他人让它发挥作用吗?

3 个答案:

答案 0 :(得分:10)

好的,我让它运转了。

现在似乎完全忽略了设置styles.xml中的值。

你需要在每个活动中创建这个,然后再修复

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition transition = // load transition here.
getWindow().setSharedElementEnterTransition(transition);
getWindow().setSharedElementExitTransition(transition);

根据ViewAnimationUtils的相同错误,您会在Android Studio中看到错误,但它会编译并运行正常。

答案 1 :(得分:5)

我们可以使用v21的主题配置。 将这些项放入res / values-v21 / styles.xml

 <item name="android:windowContentTransitions">true</item>
 <item name="android:windowAllowEnterTransitionOverlap">true</item>
 <item name="android:windowAllowReturnTransitionOverlap">true</item>

答案 2 :(得分:2)

这是在2014年10月17日之后获得5.0 sdk的工作。

但是如果启用窗口内容转换并在setEnterTransitionsetExitTransition中调用mainActivity / secondActivity,则不确定预期的行为是什么。如果它们不同(例如,选择“爆炸”和“其他”选择“幻灯片”),将应用哪一个?

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /*
        To enable window content transitions in your code instead, call the Window.requestFeature() method:
         */
        getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS);
        Transition ts = new Explode();  //Slide(); //Explode();

        ts.setStartDelay(2000);
        ts.setDuration(5000);

        /*
        If you have set an enter transition for the second activity,
        the transition is also activated when the activity starts.
         */

        getWindow().setEnterTransition(ts);
        getWindow().setExitTransition(ts);


        setContentView(R.layout.activity_main_view);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, mainViewFragment.newInstance())
                    .commit();
        }
    }

    public void launchSecondActivity() {

            /*
            If you enable transitions and set an exit transition for an activity,
            the transition is activated when you launch another activity as follows:
             */

            Intent listIntent = new Intent(this, secondActivity.class);
            startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

        }

}

// ===

public class secondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ///
        getWindow().requestFeature(android.view.Window.FEATURE_CONTENT_TRANSITIONS);
        Transition ts = new Slide();  //Slide(); //Explode();

        ts.setDuration(3000);

        getWindow().setEnterTransition(ts);
        getWindow().setExitTransition(ts);

        ///

        setContentView(R.layout.activity_scene_transition);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }