Android ListView自動(dòng)顯示隱藏布局的實(shí)現(xiàn)方法
借助View的OnTouchListener接口來(lái)監(jiān)聽(tīng)listView的滑動(dòng),通過(guò)比較與上次坐標(biāo)的大小,判斷滑動(dòng)方向,并通過(guò)滑動(dòng)方向來(lái)判斷是否需顯示或者隱藏對(duì)應(yīng)的布局,并且?guī)в袆?dòng)畫(huà)效果。
1.自動(dòng)顯示隱藏Toolbar
首先給listView增加一個(gè)HeaderView,避免第一個(gè)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的高度
定義一個(gè)mTouchSlop變量,獲取系統(tǒng)認(rèn)為的最低滑動(dòng)距離
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//系統(tǒng)認(rèn)為的最低滑動(dòng)距離
判斷滑動(dò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向下滑動(dòng)
else if(mFirstY-mCurrentY>mTouchSlop)
direction=1; //listView向上滑動(dòng)
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;
}
});
}
屬性動(dòng)畫(huà)
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();
}
//上面為位移還有透明度屬性動(dòng)畫(huà)
使用的時(shí)候theme要用NoActionBar的,不然會(huì)引起沖突。同時(shí)引入編譯
dependencies{
compile fileTree(include:['*.jar'],dir:'libs')
compile 'com.android.support:appcompat-v7:21.0.3'
}
2.當(dāng)要隱藏和顯示的組件不是toolbar,而是我們自定義的布局myView時(shí),需要注意一些點(diǎn),
(1) 布局要用相對(duì)布局,讓我們自定義的布局懸浮在listView上方。
(2)避免第一個(gè)Item被myView遮擋,給listView增加一個(gè)HeaderView,此時(shí)需要測(cè)量myView的高度,要用下面這種方法,把任務(wù)post到UI線程中,不然執(zhí)行會(huì)出錯(cuò)。
final View header=new View(this); //給listView增加一個(gè)headView,避免第一個(gè)item被遮擋 header.post(new Runnable() {
public void run() {
header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight()));
}
});
其他的與toolbar一樣
以上所述是小編給大家介紹的Android ListView自動(dòng)顯示隱藏布局的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android ListView里控件添加監(jiān)聽(tīng)方法的實(shí)例詳解
- Android ListView監(jiān)聽(tīng)滑動(dòng)事件的方法(詳解)
- android動(dòng)態(tài)布局之動(dòng)態(tài)加入TextView和ListView的方法
- Android ListView添加頭布局和腳布局實(shí)例詳解
- Android中ListView Item布局優(yōu)化技巧
- Android實(shí)現(xiàn)的ListView分組布局改進(jìn)示例
- Android自定義listview布局實(shí)現(xiàn)上拉加載下拉刷新功能
- Android App界面的ListView布局實(shí)戰(zhàn)演練
- Android Listview中顯示不同的視圖布局詳解及實(shí)例代碼
- Android開(kāi)發(fā)實(shí)現(xiàn)ListView部分布局監(jiān)聽(tīng)的方法
相關(guān)文章
Android table布局開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android table布局開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Android遞歸方式刪除某文件夾下的所有文件(.mp3文件等等)
以刪除為例,當(dāng)然,對(duì)于遍歷某文件夾下的所有文件均可用這個(gè)方法。如搜索.mp3文件等,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06
Flutter基本組件Basics?Widget學(xué)習(xí)
本文詳細(xì)講解了Flutter基本組件Basics?Widget,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
解決webview內(nèi)的iframe中的事件不可用的問(wèn)題
這篇文章主要介紹了解決webview內(nèi)的iframe中的事件不可用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android控件實(shí)現(xiàn)直播App點(diǎn)贊飄心動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了FlowLikeView控件實(shí)現(xiàn)直播App特效之點(diǎn)贊飄心動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Kotlin啟動(dòng)協(xié)程的三種方式示例詳解
這篇文章主要為大家介紹了Kotlin啟動(dòng)協(xié)程的三種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android中Root權(quán)限獲取的簡(jiǎn)單代碼
那么我們?cè)贏ndroid開(kāi)發(fā)中如何獲取Android的Root權(quán)限呢?下面是主要的簡(jiǎn)單代碼。2013-06-06
AFURLSessionManager 上傳下載使用代碼說(shuō)明
本文通過(guò)代碼給大家介紹了AFURLSessionManager 上傳下載使用說(shuō)明,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09
Android打開(kāi)WebView黑屏閃爍問(wèn)題排查
這篇文章主要介紹了Android打開(kāi)WebView黑屏閃爍問(wèn)題排查,文章通過(guò)詳細(xì)的代碼示例和圖文介紹WebView黑屏閃爍的問(wèn)題,感興趣的小伙伴可以跟著小編一起來(lái)學(xué)習(xí)2023-05-05
詳解Android Service 使用時(shí)的注意事項(xiàng)
這篇文章主要介紹了詳解Android Service 使用時(shí)的注意事項(xiàng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10

