Android L引入了新的动画功能:在不同活动中的类似视图之间进行动画制作。它记录了here。
我已尝试使用ActivityOptions.makeSceneTransitionAnimation
,但它似乎在SDK中(或在jar中)可见,所以我尝试使用反射,它返回一个空值。
还有其他人让它发挥作用吗?
答案 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的工作。
但是如果启用窗口内容转换并在setEnterTransition
和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();
}
}