framework 窗口动画缩放修改(Android 10)

本文介绍了在Android 10中如何修改framework窗口的缩放动画,包括添加代码以防止动画完成后窗口重置,详细阐述了动画获取接口、动画配置的添加以及在Launcher中调用resizeStack接口的时机,同时提到了通过抓取log和对比工具来观察窗口变化的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

framework 窗口动画缩放修改(Android 10)

窗口缩放方法

// frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

final WindowHashMap mWindowMap = new WindowHashMap();

public void performAnimationByHome(boolean enterScale) {
   
   

    Log.i("scale_wms", enterScale ? "performAnimationByHome enter scale mode" : "exit scale mode");

    Animation[] anims = enterScale ? mPolicy.createHomeScaleAnimation() : mPolicy.createHomeScaleExitAnimation();
    for (Animation anim : anims) {
   
   
        anim.setFillAfter(true);
        anim.setFillBefore(false);
    }

    Animation homeAnimation = anims[0];

    Collection<WindowState> windowStates = mWindowMap.values();
    Log.i("scale_wms" + TAG, "performAnimationByHome windowStates size:" + windowStates.size());
    for (WindowState windowState : windowStates) {
   
   
        WindowToken windowToken  = windowState.mToken;
        if (windowToken.windowType == TYPE_NAVIGATION_BAR) {
   
   
            mNavBarWindow = windowToken;
        } else if(windowToken.windowType == TYPE_STATUS_BAR){
   
   
            mStatusBarWindow = windowToken;
        } else if(windowToken.windowType == TYPE_WALLPAPER){
   
   
            mWallpaperWindowToken = (WallpaperWindowToken) windowToken;
        } else if (windowToken.windowType == TYPE_APPLICATION) {
   
   
            if (windowToken instanceof AppWindowToken) {
   
   
                AppWindowToken appWindowToken = (AppWindowToken) windowToken;
                String pkgName = appWindowToken.mActivityRecord.appInfo.packageName;
                if (appWindowToken.isActivityTypeHome()) {
   
   
                    mHomeAppWindowToken = appWindowToken;
                } else if (appWindowToken.getTask().isFloating()) {
   
   
                    Log.i("scale_wms" + TAG, "Task is floating: pkgName:" + pkgName);
                } else  if(appWindowToken.getTask().isVisible() && appWindowToken.getTask().hasContentToDisplay()){
   
   
                    Log.i("scale_wms", "other app startAnimation()");
                    for (int ndx = appWindowToken.mChildren.size() - 1; ndx >= 0; ndx--) {
   
   
                        final WindowState childWindowState = appWindowToken.mChildren.get(ndx);
                        childWindowState.startAnimation(homeAnimation)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值