日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android ActionBar随ScorllView上下拖动而透明度渐变效果

發布時間:2024/1/17 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ActionBar随ScorllView上下拖动而透明度渐变效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://blog.csdn.net/jan_s/article/details/43772697

我看到越來越多的應用使用這樣的效果,如QQ空間5.0的主界面,確實很好看!大概就搜了一下相關的實現方式,發現早就有了相關的方案:

仿QQ空間滾動ActionBar透明度變化Demo

還有我在github上看到就有這樣的實現方式,這也是本博文的主要核心內容:

具體請查看:https://github.com/AChep/Header2ActionBar

效果如下:


這是Demo結構:


1.FadingActionBarHelper.java 這個類是處理Actionbar的核心類,處理對scroll事件對actionbar背景色alpha的處理。

[java]?view plain?copy ?
  • public?class?FadingActionBarHelper?{??
  • ??
  • ????private?static?final?String?TAG?=?"FadingActionBarHelper";??
  • ??
  • ????private?int?mAlpha?=?255;??
  • ????private?Drawable?mDrawable;??
  • ????private?boolean?isAlphaLocked;??
  • ??
  • ????private?final?ActionBar?mActionBar;??
  • ??
  • ????public?FadingActionBarHelper(final?ActionBar?actionBar)?{??
  • ????????mActionBar?=?actionBar;??
  • ????}??
  • ??
  • ????public?FadingActionBarHelper(final?ActionBar?actionBar,?final?Drawable?drawable)?{??
  • ????????mActionBar?=?actionBar;??
  • ????????setActionBarBackgroundDrawable(drawable);??
  • ????}??
  • ??
  • ????public?void?setActionBarBackgroundDrawable(Drawable?drawable)?{??
  • ????????setActionBarBackgroundDrawable(drawable,?true);??
  • ????}??
  • ??
  • ????@TargetApi(Build.VERSION_CODES.KITKAT)??
  • ????public?void?setActionBarBackgroundDrawable(Drawable?drawable,?boolean?mutate)?{??
  • ????????mDrawable?=?mutate???drawable.mutate()?:?drawable;??
  • ????????mActionBar.setBackgroundDrawable(mDrawable);??
  • ????????if?(mAlpha?==?255)?{??
  • ????????????if?(Build.VERSION.SDK_INT?>=?Build.VERSION_CODES.KITKAT)??
  • ????????????????mAlpha?=?mDrawable.getAlpha();??
  • ????????}?else?{??
  • ????????????setActionBarAlpha(mAlpha);??
  • ????????}??
  • ????}??
  • ??
  • ????/**?
  • ?????*?An?{@link?android.app.ActionBar}?background?drawable.?
  • ?????*?
  • ?????*?@see?#setActionBarBackgroundDrawable(android.graphics.drawable.Drawable)?
  • ?????*?@see?#setActionBarAlpha(int)?
  • ?????*/??
  • ????public?Drawable?getActionBarBackgroundDrawable()?{??
  • ????????return?mDrawable;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?Please?use?this?method?for?global?changes?only!?
  • ?????*?This?is?helpful?when?you?need?to?provide?something?like?
  • ?????*?Navigation?drawer:?lock?ActionBar?and?set?
  • ?????*?{@link?android.graphics.drawable.Drawable#setAlpha(int)}?
  • ?????*?to?{@link?#getActionBarBackgroundDrawable()}?directly.?
  • ?????*?
  • ?????*?@param?alpha?a?value?from?0?to?255?
  • ?????*?@see?#getActionBarBackgroundDrawable()?
  • ?????*?@see?#getActionBarAlpha()?
  • ?????*/??
  • ????public?void?setActionBarAlpha(int?alpha)?{??
  • ????????if?(mDrawable?==?null)?{??
  • ????????????Log.w(TAG,?"Set?action?bar?background?before?setting?the?alpha?level!");??
  • ????????????return;??
  • ????????}??
  • ????????if?(!isAlphaLocked)?{??
  • ????????????mDrawable.setAlpha(alpha);??
  • ????????????View?view?=?mActionBar.getCustomView();??
  • ????????????if(view!=null){??
  • ????????????????//這里是對自定義actionbar背景的處理,我這邊就草草了事了??
  • ????????????????if(alpha>=55){??
  • ????????????????????view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.search);??
  • ????????????????????view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.refresh);??
  • ????????????????}else{??
  • ????????????????????view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.skin_nav_icon_l_search_rev);??
  • ????????????????????view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.skin_nav_icon_r_refresh_rev);??
  • ????????????????}??
  • ????????????????Log.i(TAG,?"search_button.alpha=>"+alpha);??
  • ????????????}??
  • ????????}??
  • ????????mAlpha?=?alpha;??
  • ????}??
  • ??
  • ????public?int?getActionBarAlpha()?{??
  • ????????return?mAlpha;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?When?ActionBar's?alpha?is?locked?{@link?#setActionBarAlpha(int)}?
  • ?????*?won't?change?drawable\'s?alpha?(but?will?change?{@link?#getActionBarAlpha()}?level)?
  • ?????*?
  • ?????*?@param?lock?
  • ?????*/??
  • ????public?void?setActionBarAlphaLocked(boolean?lock)?{??
  • ??
  • ????????//?Update?alpha?level?on?unlock??
  • ????????if?(isAlphaLocked?!=?(isAlphaLocked?=?lock)?&&?!isAlphaLocked)?{??
  • ????????????setActionBarAlpha(mAlpha);??
  • ????????}??
  • ????}??
  • ??
  • ????public?boolean?isActionBarAlphaLocked()?{??
  • ????????return?isAlphaLocked;??
  • ????}??
  • }??

  • 2.其他的組件類我這不copy了,有興趣的朋友自行下載github上的項目吧o(∩_∩)o。

    [java]?view plain?copy ?
  • public?class?NotifyingScrollView?extends?ScrollView?{??
  • ????//?Edge-effects?don't?mix?well?with?the?translucent?action?bar?in?Android?2.X??
  • ????private?boolean?mDisableEdgeEffects?=?true;??
  • ??
  • ????/**?
  • ?????*?@author?Cyril?Mottier?
  • ?????*/??
  • ????public?interface?OnScrollChangedListener?{??
  • ????????void?onScrollChanged(ScrollView?who,?int?l,?int?t,?int?oldl,?int?oldt);??
  • ????}??
  • ??
  • ????private?OnScrollChangedListener?mOnScrollChangedListener;??
  • ??
  • ????public?NotifyingScrollView(Context?context)?{??
  • ????????super(context);??
  • ????}??
  • ??
  • ????public?NotifyingScrollView(Context?context,?AttributeSet?attrs)?{??
  • ????????super(context,?attrs);??
  • ????}??
  • ??
  • ????public?NotifyingScrollView(Context?context,?AttributeSet?attrs,?int?defStyle)?{??
  • ????????super(context,?attrs,?defStyle);??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?void?onScrollChanged(int?l,?int?t,?int?oldl,?int?oldt)?{??
  • ????????super.onScrollChanged(l,?t,?oldl,?oldt);??
  • ????????if?(mOnScrollChangedListener?!=?null)?{??
  • ????????????mOnScrollChangedListener.onScrollChanged(this,?l,?t,?oldl,?oldt);??
  • ????????}??
  • ????}??
  • ??
  • ????public?void?setOnScrollChangedListener(OnScrollChangedListener?listener)?{??
  • ????????mOnScrollChangedListener?=?listener;??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?float?getTopFadingEdgeStrength()?{??
  • ????????//?http://stackoverflow.com/a/6894270/244576??
  • ????????if?(mDisableEdgeEffects?&&?Build.VERSION.SDK_INT?<?Build.VERSION_CODES.HONEYCOMB)?{??
  • ????????????return?0.0f;??
  • ????????}??
  • ????????return?super.getTopFadingEdgeStrength();??
  • ????}??
  • ??
  • ????@Override??
  • ????protected?float?getBottomFadingEdgeStrength()?{??
  • ????????//?http://stackoverflow.com/a/6894270/244576??
  • ????????if?(mDisableEdgeEffects?&&?Build.VERSION.SDK_INT?<?Build.VERSION_CODES.HONEYCOMB)?{??
  • ????????????return?0.0f;??
  • ????????}??
  • ????????return?super.getBottomFadingEdgeStrength();??
  • ????}??
  • }??


  • 3.對于普通的java程序員來說,你可以不知道怎么個原理,但是你一定要知道怎么運用它,如何運用到我們的實際項目中并且改造它,這是demo的主界面,用起來就幾行代碼,是不是很叼?

    [java]?view plain?copy ?
  • public?class?MainActivity?extends?Activity?{??
  • ??
  • ????private?FadingActionBarHelper?mFadingActionBarHelper;??
  • ????private?ActionBar?mActionBar;??
  • ??
  • ????@Override??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.activity_main);??
  • ????????mActionBar?=?getActionBar();??
  • ????????//使用自定義的布局的ActionBar??
  • ????????mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);??
  • ????????mActionBar.setCustomView(R.layout.my_actionbar);??
  • ????????//定義白色為Actionbar的背景色??
  • ????????mFadingActionBarHelper?=?new?FadingActionBarHelper(getActionBar(),??
  • ????????????????getResources().getDrawable(R.drawable.actionbar_bg));??
  • ??
  • ????????if?(savedInstanceState?==?null)?{??
  • ????????????getFragmentManager().beginTransaction()??
  • ????????????????????.add(R.id.container,?new?ListViewFragment())??
  • ????????????????????.commit();??
  • ????????}??
  • ????}??
  • ??
  • ??
  • ????@Override??
  • ????public?boolean?onCreateOptionsMenu(Menu?menu)?{??
  • ??????????
  • ????????//?Inflate?the?menu;?this?adds?items?to?the?action?bar?if?it?is?present.??
  • ????????//菜單頁面礙于效果,即被隱藏??
  • //????????getMenuInflater().inflate(R.menu.main,?menu);??
  • ????????return?true;??
  • ????}??
  • ??
  • ????@Override??
  • ????public?boolean?onOptionsItemSelected(MenuItem?item)?{??
  • ????????//?Handle?action?bar?item?clicks?here.?The?action?bar?will??
  • ????????//?automatically?handle?clicks?on?the?Home/Up?button,?so?long??
  • ????????//?as?you?specify?a?parent?activity?in?AndroidManifest.xml.??
  • ????????return?super.onOptionsItemSelected(item);??
  • ????}??
  • ??????
  • ????//這段代碼可不要忘了??
  • ????public?FadingActionBarHelper?getFadingActionBarHelper()?{??
  • ????????return?mFadingActionBarHelper;??
  • ????}??
  • }??
  • 貼了主要的代碼,其實這個實現方式還是有點復雜的,我想應該還有更簡潔的方式吧,有的話請留言分享!分享代碼是技術圈進步的一種有效方式哦!


    ----------------------------------------------------------

    最后是Demo的下載鏈接,有興趣的請自行下載:http://download.csdn.net/download/sunjundelove/8444749

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Android ActionBar随ScorllView上下拖动而透明度渐变效果的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。