自動顯示隱藏佈局的listView

来源:http://www.cnblogs.com/tangZH/archive/2016/09/17/5878785.html
-Advertisement-
Play Games

藉助View的OnTouchListener介面來監聽listView的滑動,通過比較與上次坐標的大小,判斷滑動方向,並通過滑動方向來判斷是否需顯示或者隱藏對應的佈局,並且帶有動畫效果。 1.自動顯示隱藏Toolbar 首先給listView增加一個HeaderView,避免第一個Item被Tool ...


 

 

藉助View的OnTouchListener介面來監聽listView的滑動,通過比較與上次坐標的大小,判斷滑動方向,並通過滑動方向來判斷是否需顯示或者隱藏對應的佈局,並且帶有動畫效果。

 

1.自動顯示隱藏Toolbar

     首先給listView增加一個HeaderView,避免第一個Item被Toolbar遮擋。

1 View header=new View(this);
2         header.setLayoutParams(new AbsListView.LayoutParams(
3                 AbsListView.LayoutParams.MATCH_PARENT,
4                 (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material)));
5         mListView.addHeaderView(header);

//R.dimen.abc_action_bar_default_height_material為系統ActionBar的高度

       定義一個mTouchSlop變數,獲取系統認為的最低滑動距離

1 mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//系統認為的最低滑動距離

      

       判斷滑動事件

 

 1 bbsListView.setOnTouchListener(new OnTouchListener() {
 2             
 3             @Override
 4             public boolean onTouch(View v, MotionEvent event) {
5 6 switch (event.getAction()) 7 { 8 case MotionEvent.ACTION_DOWN: 9 mFirstY=event.getY(); 10 break; 11 case MotionEvent.ACTION_MOVE: 12 mCurrentY=event.getY(); 13 if(mCurrentY-mFirstY>mTouchSlop) 14 direction=0; //listView向下滑動 15 else if(mFirstY-mCurrentY>mTouchSlop) 16 direction=1; //listView向上滑動 17 if(direction==1) 18 { 19 if(mShow) 20 { 21 toolbarAnim(1); //隱藏上方的view 22 mShow=!mShow; 23 } 24 } 25 else if(direction==0) 26 { 27 if(!mShow) 28 { 29 toolbarAnim(0); //展示上方的view 30 mShow=!mShow; 31 } 32 } 33 case MotionEvent.ACTION_UP: 34 break; 35 } 36 return false; 37 } 38 }); 39 }

      屬性動畫

 1 protected void toolbarAnim(int flag) 
 2     {
 3         
 4         
 5         if(set!=null && set.isRunning())
 6         {
 7             set.cancel();
 8         }
 9         if(flag==0)
10         {
11         
12 
13             mAnimator1=ObjectAnimator.ofFloat(mToolbar, 
14                     "translationY", linearView.getTranslationY(),0);
15             mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 0f,1f);
16         }
17         else if(flag==1)
18         {
19             
20         
21             mAnimator1=ObjectAnimator.ofFloat(mToolbar, 
22                     "translationY", linearView.getTranslationY(),-linearView.getHeight());
23             mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 1f,0f);
24             
25         }
26         set=new AnimatorSet();
27         set.playTogether(mAnimator1,mAnimator2);
28         set.start();
29         
30 }

//上面為位移還有透明度屬性動畫

使用的時候theme要用NoActionBar的,不然會引起衝突。同時引入編譯

1 dependencies{
2      compile fileTree(include:['*.jar'],dir:'libs')
3      compile 'com.android.support:appcompat-v7:21.0.3'
4 }

2.當要隱藏和顯示的組件不是toolbar,而是我們自定義的佈局myView時,需要註意一些點,

      (1) 佈局要用相對佈局,讓我們自定義的佈局懸浮在listView上方。

      (2)避免第一個Item被myView遮擋,給listView增加一個HeaderView,此時需要測量myView的高度,要用下麵這種方法,把任務post到UI線程中,不然執行會出錯

final View header=new View(this); //給listView增加一個headView,避免第一個item被遮擋
header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(
AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });

其他的與toolbar一樣

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 懶實例化-一個服務只有當程式的組件用到它的時候才進行實例化; 單例模式-每個依賴服務的組件,都是獲得服務工廠生成單個實例的引用。服務是一個單例對象或函數,對外提供特定的功能。 ...
  • ...
  • 通過DOM樹可以可容易的訪問到html文檔中的所有元素 例如向上訪問父輩的元素有以下方法 1.parent()方法可以得到所定元素的直接父元素 $("span").parent();得到<span>元素的直接父元素 2.parents()方法得到給定元素的所有父元素 $("span").parent ...
  • Cleave.js 有一個簡單的目的:幫助你自動格式輸入的文本內容。 這個想法是提供一個簡單的方法來格式化您的輸入數據以增加輸入欄位的可讀性。通過使用這個庫,您不需要編寫任何正則表達式來控制輸入文本的格式。然而,這並不意味著取代任何驗證或掩碼庫,你仍應在後端驗證數據。它支持信用卡號碼、電話號碼格式(... ...
  • 2016年9月7日,蘋果發佈iOS 10。2016年9月14日,全新的操作系統iOS 10將正式上線。 作為開發者,如何適配iOS10呢? 1.Notification(通知) 自從Notification被引入之後,蘋果就不斷的更新優化,但這些更新優化只是小打小鬧,直至現在iOS 10開始真正的進 ...
  • 本篇博客以微信為例,給微信脫殼。"砸殼"在iOS逆向工程中是經常做的一件事情,,因為從AppStore直接下載安裝的App是加殼的,其實就是經過加密的,這個“砸殼”的過程就是一個解密的過程。未砸殼的App是無法在Class-dump、Hopper等工具中使用的。所以我們要將App進行砸殼處理。在An ...
  • App Store: 天的故事 行距大果然看著舒服些 1. UI調整,細節優化 App Store: 天的故事 ...
  • 我們繼續之前的 Hypnosister 應用,當用戶開始觸摸的時候,圓形的顏色會改變。 首先,在 JXHypnosisView 頭文件中聲明一個屬性,用來表示圓形的顏色。 加入的三行代碼稱為 JXHypnosisView 的類擴展。類擴展中聲明一個顏色屬性。 在 JXHypnosisView 實現文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...