Android 9.0 修改导航栏和状态栏进入退出动画

实现功能:去掉导航栏和状态栏进入和退出动画
代码路径:

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;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
msm8953芯片是高通公司推出的一款移动处理器,主要用于Android设备。在Android 9.0系统中,GPIO和pinctrl的使用方式如下: 1. GPIO的使用: GPIO是通用输入输出引脚,可以通过软件控制其输入输出状态。在Android系统中,可以通过/sys/class/gpio目录下的文件来控制GPIO的状态。具体步骤如下: a. 确认GPIO的编号,例如GPIO_4。 b. 切换到root权限,在终端中输入以下命令: ``` echo 4 > /sys/class/gpio/export ``` 此命令将GPIO_4导出到/sys/class/gpio/gpio4目录下。 c. 配置GPIO的方向,输入或输出。例如,将GPIO_4设置为输出模式: ``` echo out > /sys/class/gpio/gpio4/direction ``` d. 控制GPIO的状态,例如将GPIO_4输出高电平: ``` echo 1 > /sys/class/gpio/gpio4/value ``` 2. pinctrl的使用 pinctrl是芯片引脚控制器,可以用于动态配置芯片内部的引脚。在Android系统中,可以通过设备树文件来配置pinctrl。具体步骤如下: a. 打开设备树文件,例如在msm8953平台中为arch/arm/boot/dts/qcom/msm8953.dtsi。 b. 在设备树文件中添加pinctrl节点,例如: ``` pinctrl { gpio1: gpio1 { pins = "gpio1"; function = "gpio"; }; }; ``` c. 在设备树文件中添加设备节点,并配置其引脚控制器,例如: ``` serial@78b0000 { pinctrl-names = "default"; pinctrl-0 = <&gpio1>; ... }; ``` 此命令将serial设备的引脚控制器配置为gpio1。 以上是在Android 9.0系统中使用GPIO和pinctrl的基本步骤,具体实现方式可能因芯片和设备而异。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值