Android L 引入了一个新的动画功能:在不同活动中的相似视图之间制作动画。它记录在这里。
我尝试使用ActivityOptions.makeSceneTransitionAnimation
,但它似乎在 SDK 中(或在 jar 中)不可见,所以我尝试使用反射,它返回一个空值。
有其他人让它工作吗?
Android L 引入了一个新的动画功能:在不同活动中的相似视图之间制作动画。它记录在这里。
我尝试使用ActivityOptions.makeSceneTransitionAnimation
,但它似乎在 SDK 中(或在 jar 中)不可见,所以我尝试使用反射,它返回一个空值。
有其他人让它工作吗?
好的,我得到它的工作。
现在似乎完全忽略了在 styles.xml 中设置的值。
您需要在每个 Activity 的 onCreate 中执行此操作,直到修复
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition transition = // load transition here.
getWindow().setSharedElementEnterTransition(transition);
getWindow().setSharedElementExitTransition(transition);
根据 ViewAnimationUtils 的相同错误,您会在 Android Studio 中看到错误,但它会编译并运行良好。
我们可以让它与 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 年 10 月 17 日之后获得的 5.0 sdk 的一些工作。
但不确定如果启用窗口内容转换并在两者中调用setEnterTransition
/和. 如果它们不同(例如,一个选择 Explode,另一个选择 Slide),将应用哪一个? setExitTransition
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();
}
}