实现功能:去掉导航栏和状态栏进入和退出动画
代码路径:
android/frameworks/base/servicescore/java/com/android/server/policy/PhoneWindowManager.java
修改地方:
在PhoneWindowManager.java中selectAnimationLw方法中可以设置导航栏和状态栏进入和退出的动画,
@Override
public int selectAnimationLw(WindowState win, int transit) {
if (PRINT_ANIM) Log.i(TAG, "selectAnimation in " + win
+ ": transit=" + transit);
if (win == mStatusBar) {
final boolean isKeyguard = (win.getAttrs().privateFlags & PRIVATE_FLAG_KEYGUARD) != 0;
final boolean expanded = win.getAttrs().height == MATCH_PARENT
&& win.getAttrs().width == MATCH_PARENT;
if (isKeyguard || expanded) {
return -1;
}
if (mNavigationBarPosition == NAV_BAR_LEFT && screenShape == SCREEN_SHAPE_TRAPEZOID ){
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return -1;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return -1;
}
}else if((mNavigationBarPosition == NAV_BAR_BOTTOM || mNavigationBarPosition == NAV_BAR_LEFT)){
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return -1;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return -1;
}
}else{
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return R.anim.dock_top_exit;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_top_enter;
}
}
} else if (win == mNavigationBar) {
if (win.getAttrs().windowAnimations != 0) {
return 0;
}
// This can be on either the bottom or the right or the left.
if (mNavigationBarPosition == NAV_BAR_BOTTOM) {
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
if (isKeyguardShowingAndNotOccluded()) {
return R.anim.dock_bottom_exit_keyguard;
} else {
return R.anim.dock_bottom_exit;
}
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_bottom_enter;
}
} else if (mNavigationBarPosition == NAV_BAR_RIGHT) {
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return R.anim.dock_right_exit;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_right_enter;
}
} else if (mNavigationBarPosition == NAV_BAR_LEFT) {
if (screenShape == SCREEN_SHAPE_TRAPEZOID){
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return -1;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return -1;
}
}else{
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
return R.anim.dock_left_exit;
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_left_enter;
}
}
}
} else if (win.getAttrs().type == TYPE_DOCK_DIVIDER) {
return selectDockedDividerAnimationLw(win, transit);
}
if (transit == TRANSIT_PREVIEW_DONE) {
if (win.hasAppShownWindows()) {
if (PRINT_ANIM) Log.i(TAG, "**** STARTING EXIT");
return com.android.internal.R.anim.app_starting_exit;
}
} else if (win.getAttrs().type == TYPE_DREAM && mDreamingLockscreen
&& transit == TRANSIT_ENTER) {
// Special case: we are animating in a dream, while the keyguard
// is shown. We don't want an animation on the dream, because
// we need it shown immediately with the keyguard animating away
// to reveal it.
return -1;
}
return 0;
}
其中状态栏的位置可以分:左边、底部。导航栏位置可以分为:底部、右边、左边,其中当导航栏和状态栏显示的时候就会进入动画,如果导航栏和状态栏退出的时候就会隐藏动画,如果我们想去掉动画,只需要返回-1.例如
//进入和退出的动画
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
if (isKeyguardShowingAndNotOccluded()) {
return R.anim.dock_bottom_exit_keyguard;
} else {
return R.anim.dock_bottom_exit;
}
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_bottom_enter;
}
//去掉动画
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
if (isKeyguardShowingAndNotOccluded()) {
return -1;
} else {
return -1;
}
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return -1;