【Android】SystemUI设置透明状态栏

将系统状态栏背景设置为透明

加载流程
StatusBar —> PhoneStatusBarView —> PhoneStatusBarTransitions —> BarTransitions
StatusBar.java

//makeStatusBarView
protected void makeStatusBarView(){
    inflateStatusBarWindow(context);
    FragmentHostManager.get(mStatusBarWindow).addTagListener(CollapsedStatusBarFragment.TAG,(tag,fragment)->{
            CollapsedStatusBarFragment statusBarFragment = (CollapsedStatusBarFragment) fragment;
            statusBarFragment.initNotificationIconArea(mNotificationIconAreaController);
            mStatusBarView = (PhoneStatusBarView) fragment.getView();//通过CollapsedStatusBarFragment.onCreateView获取PhoneStatusBarView对象
            
    });
}

CollapsedStatusBarFragment.java

@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,Bundle savedInstanceState){
    return inflater.inflate(R.layout.status_bar,container,false);
}

status_bar.xml

<com.android.systemui.statusbar.phone.PhoneStatusBarView>
...
</com.android.systemui.statusbar.phone.PhoneStatusBarView>

PhoneStatusBarView.java

public PhoneStatusBarView(Context context,AttributeSet attrs){
    super(context,attrs);
    mBarTransitions = new PhoneStatusBarTransitions(this);
}

@Override
public void onFinishInflate(){
    mBarTransitions.init();
}

PhoneStatusBarTransitions.java

public void init(){
    ...
    applyModeBackground(-1,getMode(),false);
    applyMode(getMode(),false);
}

BarTransitions.java

protected void applyModeBackground(int oldMode,int newMode,boolean animate){
    mBackground.applyModeBackground(oldMode,newMode,animate);//跳转至内部类BarBackgroundDrawable中
}


private static class BarBackgroundDrawable extends Drawable {
    public BarBackgroundBrawable(Context context,int gradientResourceId){
        if(DEBUG_COLORS){
            mOpaque = 0x00000000;//设置透明颜色代码
        }else{
            mOpaque = 0x00000000;        
        }
    }
    
    public void applyModeBackground(int oldMode,int newMode,boolean animate){
        if (mMode == newMode) return;
        mMode = newMode;
        mAnimating = animate;
        if (animate) {
            long now = SystemClock.elapsedRealtime();
            mStartTime = now;
            mEndTime = now + BACKGROUND_DURATION;
            mGradientAlphaStart = mGradientAlpha;
            mColorStart = mColor;
        }
        invalidateSelf();//最终走向draw
    }
    @Override
    public void draw(Canvas canvas) {
        mMode = -1;//add,强制走设定颜色
        ...
        else{
            targetColor = mOpaque;        
        }            
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值