考虑我有以下层次结构:
- 1 级活动(例如主菜单)
- 2 级活动(例如日历)
- 3 级活动(例如日历日)
- 2 级活动(例如日历)
存在以下用例:
- 走进深渊
- 回去
- 将当前活动带回屏幕(屏幕关闭后或离开应用程序后运行的后台活动)
需要以下转换行为:
用例 1 + 3:我希望旧活动向左滑出,新活动从右侧滑入
用例 2:我希望旧活动向右滑出,新活动从左侧滑入
我尝试了很多方法来实现这一目标,overridePendingTransition
但没有一种组合可以正常工作......我遇到了类似以下的问题:
public class BaseActivity extends Activity
{
@Override
protected void onPause()
{
adjustWindowAnimation(this, false);
super.onPause();
}
@Override
protected void onResume()
{
adjustWindowAnimation(this, true);
super.onResume();
}
protected void adjustWindowAnimation(Activity parent, boolean start)
{
if (start)
parent.overridePendingTransition(R.anim.slide_from_right_in, R.anim.slide_to_left_out);
else
parent.overridePendingTransition(R.anim.slide_from_left_in, R.anim.slide_to_right_out);
}
// @Override
// protected void onCreate(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onCreate(savedInstanceState);
// }
// @Override
// protected void onRestoreInstanceState(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onRestoreInstanceState(savedInstanceState);
// }
// @Override
// protected void onStart()
// {
// super.onStart();
// adjustWindowAnimation(this, true);
// }
// @Override
// protected void onNewIntent(Intent intent)
// {
// adjustWindowAnimation(this, true);
// super.onNewIntent(intent);
// }
// @Override
// protected void onStop()
// {
// adjustWindowAnimation(this, false);
// super.onStop();
// }
// @Override
// public void finish()
// {
// adjustWindowAnimation(this, false);
// super.finish();
// }
// @Override
// protected void onDestroy()
// {
// Crouton.clearCroutonsForActivity(this);
// super.onDestroy();
// }
// @Override
// public void onBackPressed()
// {
// adjustWindowAnimation(this, false);
// super.onBackPressed();
// }
}
动画(这些应该可以正常工作):
从左滑入:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="-100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideFromRightIn:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideToLeftOut:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0%" android:toXDelta="-100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideToRightOut:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0" android:toXDelta="100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>