日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
【Android】這效果,我沒(méi)法描述

前言

成都創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),營(yíng)銷型網(wǎng)站到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)十年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)綿陽(yáng)服務(wù)器托管、成都app軟件開發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷。

最近接到一個(gè)需求,這需求讓我表示很尷尬。(下面是一些廢話)

要求的效果是這樣的,頂部有部分懸浮,接著是一些布局,在下面是幾個(gè)可切換的Tab頁(yè)面,然后滾動(dòng)的時(shí)候~~吧啦吧啦吧啦吧啦~~ 還是直接看圖吧

主要就是頂部和Tab的懸浮,還有就是被頂?shù)舻哪莻€(gè)效果。

聽到要實(shí)現(xiàn)這樣的效果,我抽屜那把砍產(chǎn)品專用菜刀已經(jīng)蠢蠢欲動(dòng)了。

思路

先說(shuō)說(shuō)實(shí)現(xiàn)的思路吧,上面的效果大致可以分成兩個(gè)部分:

1、Tab向上滾動(dòng)到頂部時(shí)懸浮

Tab滾動(dòng)后懸浮在頂部嘛~~ 這效果使用CoordinatorLayout + AppBarLayout就能輕松實(shí)現(xiàn)。(什么?你還不懂這兩個(gè)控件怎么使用?額,應(yīng)該可以勉強(qiáng)看懂后面的內(nèi)容)

2、頂部懸浮以及“被頂走”的效果

只要在CoordinatorLayout外面套一層FrameLayout,然后把這個(gè)頂部的布局改在上面。接著監(jiān)聽AppBarLayout的滾動(dòng),利用topMargin實(shí)現(xiàn)被“頂上去”的效果

拆分完畢,接下來(lái)就是實(shí)現(xiàn)了

實(shí)現(xiàn)

  • Tab的懸浮效果

利用CoordinatorLayout、AppBarLayout、TabLayout、ViewPager來(lái)實(shí)現(xiàn)Tab的懸浮效果

 
 
 
 

  1.  

LinearLayout中設(shè)置app:layout_scrollFlags="scroll|exitUntilCollapsed" 而 TabLayout 不設(shè)置app:layout_scrollFlags屬性

ViewPager中使用app:layout_behavior="@string/appbar_scrolling_view_behavior"

layout_scrollFlags:AppBarLayout供Children View使用的屬性,一共有五種值:scroll,enterAlways,enterAlwaysCollapsed,snap,exitUntilCollapsed。具體的使用可以參考Android 詳細(xì)分析AppBarLayout的五種ScrollFlags

(CoordinatorLayout、AppBarLayout的詳細(xì)用法我就不多說(shuō)了)

然后,只要在Java代碼中為ViewPager添加幾個(gè)列表Fragment就能看到以下的效果(注意:列表不可以是ListView,需要用RecyclerView)

到目前為止,效果已經(jīng)實(shí)現(xiàn)了大半。最后值需要實(shí)現(xiàn)“被頂走”的效果就好了。

  • 頂部“被頂走”的效果

這時(shí)候,布局稍微改變下。

 
 
 
 

  1.  

在原有的基礎(chǔ)上,套了個(gè)FrameLayout,頂部的懸浮部分可以通過(guò)FrameLayout來(lái)實(shí)現(xiàn)。這樣也導(dǎo)致下面的布局被蓋住了一部分,因此在LinearLayout中加了與懸浮部分相同高度的空View。

布局是完成了,那個(gè)“被頂走”的效果怎么實(shí)現(xiàn)呢?這時(shí)候只要在MainActivity中對(duì)AppBarLayout的滾動(dòng)進(jìn)行監(jiān)聽即可。

 
 
 
 
  1. @BindView(R.id.app_bar) 
  2.     AppBarLayout mAppBar; 
  3.     @BindView(R.id.sticky_view) 
  4.     View mStickyView; 
  5.     @BindView(R.id.header) 
  6.     View mHeader; 
  7.     private void setAppBarListener() { 
  8.         mAppBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
  9.             @Override 
  10.             public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
  11.                 //頭部高度(除去被頂部覆蓋的部分) 
  12.                 int minScrollHeight = mHeader.getMeasuredHeight(); 
  13.                 int margin = minScrollHeight + verticalOffset; 
  14.                 margin = margin > 0 ? 0 : margin; 
  15.                 FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mStickyView.getLayoutParams(); 
  16.                 layoutParams.topMargin = margin; 
  17.                 mStickyView.setLayoutParams(layoutParams); 
  18.             } 
  19.         }); 

這里通過(guò)AppBarLayout滾動(dòng)的進(jìn)行監(jiān)聽(向上滾動(dòng)時(shí),verticalOffset值的變化為:0、-1 、-2 ... -n-1、-n)來(lái)計(jì)算margin值。通過(guò)改變topMargin,實(shí)現(xiàn)“被頂走”的效果。

再看一眼效果:

敲到這里,我才默默的收起了那把砍產(chǎn)品專用菜刀。

Tips

問(wèn)題:使用CoordinatorLayout時(shí),滾動(dòng)不流暢問(wèn)題

解決方案:可以寫個(gè)Behavior添加到AppBarLayout中。具體的解決方案

問(wèn)題:如果你在想要刷新功能,在CoordinatorLayout外面套了一個(gè)SwipeRefreshLayout,一不小心就觸發(fā)了刷新~~(自己體會(huì))

解決方案:這個(gè)問(wèn)題可以通過(guò)對(duì)AppBarLayout的監(jiān)聽,設(shè)置swipeLayout的Enabled來(lái)處理

 
 
 
 
  1. mAblAppBar.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { 
  2.    if (verticalOffset == 0) { 
  3.       swipeLayout.setEnabled(true); 
  4.    } else { 
  5.        if (!swipeLayout.isRefreshing()) { 
  6.           swipeLayout.setEnabled(false); 
  7.        } 
  8.    } 
  9. }); 

本文名稱:【Android】這效果,我沒(méi)法描述
文章路徑:http://m.5511xx.com/article/cdjshgi.html