6

Android L 引入了一个新的动画功能:在不同活动中的相似视图之间制作动画。它记录在这里

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

有其他人让它工作吗?

4

3 回答 3

10

好的,我得到它的工作。

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

您需要在每个 Activity 的 onCreate 中执行此操作,直到修复

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

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

于 2014-07-01T19:42:52.690 回答
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>
于 2014-07-05T14:44:39.860 回答
2

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

但不确定如果启用窗口内容转换并在两者中调用setEnterTransition/和. 如果它们不同(例如,一个选择 Explode,另一个选择 Slide),将应用哪一个? setExitTransitionmainActivitysecondActivity

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();
        }
    }
于 2014-10-21T19:41:57.360 回答