我正在使用ScrollView更改片段中的ActionBar背景。我有一个ScrollView监听器,它根据滚动距离更改分层列表中项目的alpha。动作栏实际上很棒。但是,导航抽屉背景受到这种alpha变化的影响,我不明白为什么;导航抽屉背景变得不可见。我可以在运行Android L的Nexus 7上轻松重现这一点,但对于某些4.4设备并不总是这样。
主要部分是:
ActionBar actionBar = activity.getSupportActionBar();
LayerDrawable mActionBarBg = (LayerDrawable) getResources().getDrawable(R.drawable.background_actionbar);
if (mActionBarBg != null) {
setActionBarBgAlpha(0);
actionBar.setBackgroundDrawable(mActionBarBg);
}
Alpha计算器是这样的:
scrollView.setOnScrollChangedLitstener(new OnScrollChangedListener() {
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
t = Math.max(t, 0);
endpointHeader.setTranslationY(endpointHeader.getTop() + (t * 0.25f));
mScrollAlpha = (int) Math.min(alphaToHeightRatio * t, 255);
updateActionBarElemsAlpha(mScrollAlpha);
}
});
其他几种方法:
private void updateActionBarElemsAlpha(int updatedAlpha){
if(mActionBarTitleColor != null){
mActionBarTitleColor.setAlpha(updatedAlpha);
mActionBarTitleView.setTextColor(mActionBarTitleColor.getColor());
}
setActionBarBgAlpha(updatedAlpha);
}
private void setActionBarBgAlpha(int alpha){
if(mActionBarBg != null){
mActionBarBg.getDrawable(1).setAlpha(alpha);
mActionBarBg.getDrawable(2).setAlpha(alpha);
}
}
background_actionbar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/gradient" />
<item android:drawable="@color/grey_divider"/>
<item android:bottom="2dp"
android:drawable="@color/White"/>
</layer-list>
答案 0 :(得分:1)
在更改任何属性之前,您应始终改变drawable,否则您将最终修改默认情况下在所有实例中共享的缓存状态。
if (mActionBarBg != null) {
mActionBarBg.mutate();
mActionBarBg.getDrawable(1).setAlpha(alpha);
mActionBarBg.getDrawable(2).setAlpha(alpha);
}