Android ListView自動顯示隱藏布局的實現(xiàn)方法
借助View的OnTouchListener接口來監(jiān)聽listView的滑動,通過比較與上次坐標的大小,判斷滑動方向,并通過滑動方向來判斷是否需顯示或者隱藏對應(yīng)的布局,并且?guī)в袆赢嬓Ч?br />
1.自動顯示隱藏Toolbar
首先給listView增加一個HeaderView,避免第一個Item被Toolbar遮擋。
View header=new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header); //R.dimen.abc_action_bar_default_height_material為系統(tǒng)ActionBar的高度
定義一個mTouchSlop變量,獲取系統(tǒng)認為的最低滑動距離
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//系統(tǒng)認為的最低滑動距離
判斷滑動事件
bbsListView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY=event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY=event.getY(); if(mCurrentY-mFirstY>mTouchSlop) direction=0; //listView向下滑動 else if(mFirstY-mCurrentY>mTouchSlop) direction=1; //listView向上滑動 if(direction==1) { if(mShow) { toolbarAnim(1); //隱藏上方的view mShow=!mShow; } } else if(direction==0) { if(!mShow) { toolbarAnim(0); //展示上方的view mShow=!mShow; } } case MotionEvent.ACTION_UP: break; } return false; } }); }
屬性動畫
protected void toolbarAnim(int flag) { if(set!=null && set.isRunning()) { set.cancel(); } if(flag==0) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),0); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 0f,1f); } else if(flag==1) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),-linearView.getHeight()); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 1f,0f); } set=new AnimatorSet(); set.playTogether(mAnimator1,mAnimator2); set.start(); } //上面為位移還有透明度屬性動畫
使用的時候theme要用NoActionBar的,不然會引起沖突。同時引入編譯
dependencies{ compile fileTree(include:['*.jar'],dir:'libs') compile 'com.android.support:appcompat-v7:21.0.3' }
2.當要隱藏和顯示的組件不是toolbar,而是我們自定義的布局myView時,需要注意一些點,
(1) 布局要用相對布局,讓我們自定義的布局懸浮在listView上方。
(2)避免第一個Item被myView遮擋,給listView增加一個HeaderView,此時需要測量myView的高度,要用下面這種方法,把任務(wù)post到UI線程中,不然執(zhí)行會出錯。
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一樣
以上所述是小編給大家介紹的Android ListView自動顯示隱藏布局的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android ListView里控件添加監(jiān)聽方法的實例詳解
- Android ListView監(jiān)聽滑動事件的方法(詳解)
- android動態(tài)布局之動態(tài)加入TextView和ListView的方法
- Android ListView添加頭布局和腳布局實例詳解
- Android中ListView Item布局優(yōu)化技巧
- Android實現(xiàn)的ListView分組布局改進示例
- Android自定義listview布局實現(xiàn)上拉加載下拉刷新功能
- Android App界面的ListView布局實戰(zhàn)演練
- Android Listview中顯示不同的視圖布局詳解及實例代碼
- Android開發(fā)實現(xiàn)ListView部分布局監(jiān)聽的方法
相關(guān)文章
Android高手進階教程(二十二)之Android中幾種圖像特效處理的集錦匯總!!
本篇文章主要介紹了Android中幾種圖像特效處理,比如圓角,倒影,還有就是圖片縮放,Drawable轉(zhuǎn)化為Bitmap,Bitmap轉(zhuǎn)化為Drawable等,有需要的可以了解一下。2016-11-11Android利用listview控件操作SQLite數(shù)據(jù)庫實例
我們利用SQLiteOpenHelper類建立一個數(shù)據(jù)庫,并寫好增、刪、查等方法,通過SimpleCursorAdapter連接listview實現(xiàn)數(shù)據(jù)庫的增加、查詢以及長按刪除的功能。2017-04-04Jetpack?Compose對比React?Hooks?API相似度
這篇文章主要為大家介紹了Jetpack?Compose對比React?Hooks?API相似度,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08解決Android使用Handler造成內(nèi)存泄露問題
內(nèi)存泄露的危害就是會使虛擬機占用內(nèi)存過高,導(dǎo)致OOM(內(nèi)存溢出),程序出錯。接下來通過本文給大家分享Android使用Handler造成內(nèi)存泄露問題及解決方法,一起看看吧2017-08-08OpenGL Shader實現(xiàn)簡單轉(zhuǎn)場效果詳解
轉(zhuǎn)場效果常出現(xiàn)再視頻剪輯當中,用于銜接兩段視頻片段切換的過渡效果。本文將介紹如何利用OpenGL Shader實現(xiàn)簡單的轉(zhuǎn)場效果,需要的小伙伴可以參考一下2022-02-02Android自定義實現(xiàn)BaseAdapter的優(yōu)化布局
這篇文章主要為大家詳細介紹了Android自定義實現(xiàn)BaseAdapter的優(yōu)化布局,感興趣的小伙伴們可以參考一下2016-08-08Android實現(xiàn)底部狀態(tài)欄切換的兩種方式
這篇文章主要介紹了Android實現(xiàn)底部狀態(tài)欄切換功能,在文中給大家提到了兩種實現(xiàn)方式,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06