2014-09-22 7 views
0

Я меняю фон ActionBar в фрагменте с помощью ScrollView. У меня есть прослушиватель ScrollView, который изменяет альфу элементов в слоистом списке на основе расстояния прокрутки. Панель действий действительно отлично работает. Тем не менее, на фоне ящика навигации влияет это альфа-изменение, и я понятия не имею, почему; фон навигационного ящика становится невидимым. Я могу воспроизвести это легко на Nexus 7 под управлением Android L, но это не всегда происходит для некоторых 4.4 устройств.Изменение фона ActionBar влияет на навигационный ящик

Основная часть:

ActionBar actionBar = activity.getSupportActionBar(); 
LayerDrawable mActionBarBg = (LayerDrawable) getResources().getDrawable(R.drawable.background_actionbar); 
if (mActionBarBg != null) { 
     setActionBarBgAlpha(0); 
     actionBar.setBackgroundDrawable(mActionBarBg); 
} 

Альфа калькулятор заключается в следующем:

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> 

ответ

1

Вы должны всегда мутировать чертежи перед изменением любых атрибутов, иначе вы в конечном итоге измените состояние кеширования, которое по умолчанию используется для всех экземпляров.

if (mActionBarBg != null) { 
    mActionBarBg.mutate(); 
    mActionBarBg.getDrawable(1).setAlpha(alpha); 
    mActionBarBg.getDrawable(2).setAlpha(alpha); 
} 
+0

работает как очарование! – ono

Смежные вопросы