2014-09-03 21 views
3

我尽我的主滚动型的滚动事件过程中创建我的动作条淡入阿尔法:更改动作条阿尔法滚动事件期间

我尝试这样做:

//Active Overlay for ActionBar before set my content in the activity 
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

//create a new Drawable for the AB background 
final ColorDrawable newColor = new ColorDrawable(getResources().getColor(R.color.primaryColor)); 
newColor.setAlpha(0); 
getActionBar().setBackgroundDrawable(newColor); 

//create a OnScrollListener to get ScrollY position 
final ScrollView mainScrollView = (ScrollView) findViewById(R.id.place_detail_scrollView); 
mainScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
      @Override 
      public void onScrollChanged() { 
       final int scrollY = mainScrollView.getScrollY(); 
       final int boundY = 300; 
       final float ratio = (float) (scrollY/boundY) ; 
       newColor.setAlpha((int)(ratio*255)); 
      } 
     }); 

从理论上讲,我的动作条会褪色它在ScrollView的位置0和300之间的阿尔法。不幸的是,我的AB每次都是透明的......任何想法?

回答

4

我发现了这个问题,我使用了一个预先的果冻豆设备,所以有一个解决这个问题的方法。

事实上,随着预JELLY_BEAN_MR1设备,我们必须重视以下CallbackonCreate(Bundle)方法为Drawable

private Drawable.Callback mDrawableCallback = new Drawable.Callback() { 
    @Override 
    public void invalidateDrawable(Drawable who) { 
     getActionBar().setBackgroundDrawable(who); 
    } 

    @Override 
    public void scheduleDrawable(Drawable who, Runnable what, long when) { 
    } 

    @Override 
    public void unscheduleDrawable(Drawable who, Runnable what) { 
    } 
}; 

然后设置回调

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 
    mActionBarBackgroundDrawable.setCallback(mDrawableCallback); 
} 

而这一切,谢谢Cyril Mottier