1. 程式人生 > >安卓仿知乎個人主頁,實現巢狀滑動和漸隱效果

安卓仿知乎個人主頁,實現巢狀滑動和漸隱效果

本篇文章已經授權微信公共號guolin_blog(郭霖)獨家釋出

先看知乎的效果:

這裡寫圖片描述

再看我們實現的效果:

這裡寫圖片描述

網上也有很多巢狀滑動的例子,先說說我這個的優點。
1.頭部可以參與滑動
2.下面可以加viewpager
3.支援RecyclerView和ScrollView
4.基於Behavior可以獲取事實滾動距離可做更多聯動
5.不必重寫過多的滑動事件處理,幾乎只是玩xml

實現思路:
CoordinatorLayout做最上層佈局,上方伸縮處AppBarLayout,下面viewpager裡面放NestedScrollView。

觀察知乎主頁的效果:

1.下面多item處向上滑動首先伸縮上面的head頭部,頭部收縮後下面則進入滑動,

2.反之向下拉先回把多item出拉到最上方,之後伸展頭部。

3.下面多item處支援左右滑動。

4.頭像名字漸隱效果。

5.兩個title可以點選(title是在head中而不是下面)

1。2

下面我們來各個擊破:
1和2其實最容易只要實現系統的CoordinatorLayout

自從谷歌推出CoordinatorLayout後巢狀滑動玩起就沒那麼難了,
12實現其實十分簡單就是系統自帶的CoordinatorLayout即可實現,不用書寫java程式碼。結構如下

CoordinatorLayout—– AppBarLayout—–CollapsingToolbarLayout——Toolbar。
CoordinatorLayout—–viewPager。

父佈局CoordinatorLayout兩個節點AppBarLayout和viewPager
AppBarLayout中的節點ollapsingToolbarLayout它的節點又是Toolbar
如此佈局巢狀聯動伸縮toolsbar效果就實現了。下面是佈局巢狀結構的簡略程式碼。

<?xml version="1.0" encoding="utf-8"?>


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content" android:fitsSystemWindows="true"> <android.support.v4.view.ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior" > </android.support.v4.view.ViewPager> <android.support.design.widget.AppBarLayout android:id="@+id/appbar"> <android.support.design.widget.CollapsingToolbarLayout > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" > </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

3

接下來就是3下方的viewpager首先viewpager必須加上這行程式碼,否則滑動事件不會分發給他,

app:layout_behavior="@string/appbar_scrolling_view_behavior"

另外注意viewpager的高度必須是match——parent否則也不會有聯動效果。

<android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
    </android.support.v4.view.ViewPager>

4頭像名字漸隱效果。

頭像漸隱,我們需要在CoordinatorLayout中找到一個直接子view並且指定:

app:layout_behavior="com.example.liangmutian.linkscrollmsky.RelativelayoutBehavior"

接下來看RelativelayoutBehavior這個類本demo也就這個類中進行了一些簡單的座標處理,

@Override
    public boolean layoutDependsOn(CoordinatorLayout parent, RelativeLayout child, View dependency) {
float maxL = DensityUtil.dip2px(mContext, 150) + DensityUtil.getZhuangtai(mContext);
Message message = new Message();

        if (dependency.getY() > 0) {
float a = ((dependency.getY() - maxL) / (DensityUtil.dip2px(mContext, 356) - maxL));
message.what = (int) (a * 100f);
if (MyActivity.mHandler != null)
                MyActivity.mHandler.sendMessage(message);
        }
        return super.layoutDependsOn(parent, child, dependency);
    }

RelativeLayout child就是剛剛的直接子view,View dependency就是產生滑動的view。通過view滑動距離的控制,我們就可以計算當前滑動幅度,從而實現頭像漸隱。356dp就是整個AppBarLayout的高度,150dp是Toolbar的高度。可被滑動的總距離就是,
AppBarLayout的高度-Toolbar的高度-狀態列的高度。那可被滑動的總距離做分母,滑動距離做分子,也就計算出了滑動服務,用過Handler去更新Activity中的控制元件透明度,就可以了。

super.handleMessage(msg);
float alpha = ((float) msg.what) / 100f;
Log.e("alpha", msg.what + ":" + alpha);
overRe.setAlpha(alpha);

5.兩個title可以點選(title是在head中而不是下面)

兩個title可點選並跟隨頭部滑動,這裡有坑高危請注意。
我一開始,是直接寫到AppBarLayout裡,發現不錯,可以跟隨滑動,也能點,但是如果畫上去也就是完全縮排去的時候,就不能點了,原來我們只是把toolsbar設定成透明色,來實現實時透AppBarLayout中的檢視,當完全伸縮,Toolsbar就出現在前面了,後面的東西也就不能點了。

解決思路:

類似於懸停的解決思路吧,其實就在Toolsbar中也放置這樣一個佈局石頭,在頭部展開的時候收縮,在不展開的時候顯示,動態去控制兩個一樣的佈局的顯隱藏就ok了。

然後,挖槽還是有坑,如果把AppBarLayout中的佈局放在最底下,然後讓頭部完全縮排去,兩個佈局不能完全重疊,這樣在控制,顯示隱藏的時候就會有輕微的跳躍。於是機智如我,發現他們倆只是一個狀態的距離好吧一行程式碼,拉近你我的距離:

RelativeLayout backRe;
backRe.setPadding(0, 0, 0, DensityUtil.getZhuangtai(this));

就這樣效果完全實現,只是在RelativelayoutBehavior中進行了一點的座標運算,其他地方基本不需要,比較容易上手。

感覺還有需優化的地方也希望大家多提意見。

歡迎關注作者。歡迎評論討論。歡迎拍磚。
如果覺得這篇文章對你有幫助,歡迎打賞, 歡迎star,Fork我的github。 喜歡作者的也可以Follow。
歡迎加作者自營安卓開發交流群:308372687

這裡寫圖片描述

相關推薦

仿個人主頁實現滑動效果

本篇文章已經授權微信公共號guolin_blog(郭霖)獨家釋出 先看知乎的效果: 再看我們實現的效果: 網上也有很多巢狀滑動的例子,先說說我這個的優點。 1.頭部可以參與滑動 2.下面可以加viewpager 3.支援Recycler

自定義 Behavior實現滑動、平滑切換周月檢視的日曆

使用 CoordinateLayout 可以協調它的子佈局,實現滑動效果的聯動,它的滑動效果由 Behavior 實現。以前用過小米日曆,對它滑動平滑切換日月檢視的效果印象深刻。本文嘗試用自定義 Behavior 實現一個帶有這種效果的日曆。 簡介

仿個人中心沉浸式頁面

最終效果:主要用到三個元件:CoordinatorLayout,AppBarLayout,CollapsingToolbarLayoutCoordinatorLayout協調者佈局,Google將其解釋為一個超級FrameLayout:CoordinatorLayout is

IOS共用一個二維碼實現掃碼跳轉連結-踩坑記_04

ios和安卓共用一個二維碼,實現掃碼跳轉連結 直接上程式碼了 也是參考了網上的demo,直接小修改了一下。臨時接了一個任務,直接套過來了。因為安卓微信的內建的瀏覽器和手機自帶的不一樣,在ios上面沒有問題,會直接提示跳轉到appstore。要求是實現安卓微信跳轉顯示

【Android】仿夜間模式的實現

1.簡介 目前很多App都有夜間模式的功能,網上教程也是很多,最近專案不忙,抽空學習了下,在這做下記錄,希望能幫到正在看部落格的你,我們先來看下知乎的效果: 看我的效果: 臥槽,好像啊,哈

仿BOSS直聘的那種選擇國家、地區地區程式碼的列表

最近在工作之餘,擠了點時間寫這篇部落格,是公司專案要實現一個功能,就是:選擇國家和地區還有對應的編號,類似於下拉選擇聯絡人的列表一樣的,上張圖: 1.MainActivity package com.city.list.main; import

Android 仿廣告控制元件,廣告圖隨滑動控制元件滑動

仿知乎廣告模組,效果:RecyclerView其中的一個item是廣告圖片 - 知乎的效果圖如下: 從下到上 從上到下 - 仿的效果圖: 兩種情況,一種是廣告圖片比滑動控制元件長,另外一種是廣告圖片比滑動控制元件短,效果如下: 廣告圖

懸浮佈局的最差實現方式懸浮頭部實現viewpager滑動

給部分程式碼看個大概實現,繼承 linearLayout,自己處理滑動,自己計運算元佈局中第一個佈局為摺疊部分。 其實,用scrollview,將listview以及懸浮部分高度設定為螢幕高度,效果直接,省事,滑動體驗更好。巢狀佈局也沒有滑動衝突 public class Scrollabl

仿主頁上滑隱藏NavigationBar下滑顯示

最近在仿作知乎客戶端,知乎首頁的 navigationBar 會隨著下方的 tableView 滑動而改變,上滑隱藏,下拉顯示,並且下拉需要一定速度才會觸發顯示。在網上查了一下,看到一個隨 TableView 滑動改變 NavigationBar 透明度的demo,雖然和自

【iOS】仿日報RxSwift-Part2-詳情頁的搭建

前言 在上一篇,我們搭建了首頁。而這篇,我們將開始搭建話題詳情頁。 分析 還是先來看下演示gif { "body": "<div class=\"main-wrap content-wrap\">\n<div cla

仿滑動隱藏與顯示ToolBarSwipRefreshLayout重新整理

直接上效果圖: 一、設定ToolBar及偽沉浸式上一篇就說過,這裡不再講解了。 這個demo必須的依賴: compile 'com.github.fangx:haorefresh:1.0' compile 'com.wang

使用Socket發送中文C語言服務端接收亂碼問題解決方式

article nbsp ons size ret con pre n+1 utf8 今天用安卓通過Socket發送數據到電腦上使用C語言寫的服務端,發送英文沒有問題,可當把數據改變成中文時,服務端接收到的數據確是亂碼。 突然想到。VS的預處理使用的

動手分析仿QQ聯系人列表TreeView控件

code children cas tail pri bstr abstract viewgroup teset 因項目需要需要用到仿QQ聯系人列表的控件樣式,於是網上找到一個輪子(https://github.com/TealerProg/TreeView)

去除自定義Dialog黑色背景設置無邊框透明

isf window bsp 希望 nbsp tle -name rep lan 我們在自定義Dialog的時候,往往會希望除去安卓系統定義背景和標題,以便於更好的顯示我們自己想要的效果。 其實我們只需要註意幾個地方就行了。 1.在Style文件的中定義Dialog的主題

朱雀大廳源碼制作惡意軟件Skygofree爆發連你的照片都能監控到

進化 收集 工程 一份 全面 惡意軟件 window skype 一個 昨日,根據卡巴斯基實驗室公布的一份報告朱雀大廳源碼制作(h5.hxforum.com)企鵝2952777280 三公,炸金花、三公源碼出售 房卡出售 後臺出租,研究人員發現了一款相當強悍的惡意軟件,名為

python 模擬登錄包含驗證碼(轉)

mozilla log 5.0 color att pos head one 成功 #!/usr/bin/env python3 # -*- coding: utf-8 -*- ‘‘‘ Required - requests (必須) - pillow (可選) Info

JAVA開源仿問答原始碼

專案說明 FlyCms 是一個類似知乎以問答為基礎的完全開源的JAVA語言開發的社交網路建站程式,基於 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr 應用架構,專注於社群內容的整理、歸類和檢索,它集合了問答,digg,wiki 等多個程式的優點,幫助

仿微信上傳圖片問題(2)

之前那樣做,發現圖片好模糊,加了一個壓縮圖片的,還有儲存圖片的方法如下: 大神的demo地址:http://blog.csdn.net/jdsjlzx/article/details/44160603#html 微信上傳圖片問題連結:http://blog.csdn.net/lmy0

仿微信上傳圖片問題

最近做了安卓仿微信上傳圖片,果斷把大神的demo拷了過來,後來發現上傳的時候出現了幾個問題,那個部落格下老是提醒連結過多,評論不了,就搬到這了## ---------首先先貼大神的demo地址:http://blog.csdn.net/jdsjlzx/article/details/

如何爬取了使用者資訊並做了簡單的分析

爬蟲:python27 +requests+json+bs4+time 分析工具: ELK套件 開發工具:pycharm 1.性別分佈 0 綠色代表的是男性 ^ . ^ 1 代表的是女性 -1 性別不確定 可見知乎的使用者男性頗多。