自動顯示和隱藏頭佈局的ListView原來是那麼簡單
阿新 • • 發佈:2019-01-26
前言:
今天在看Android進階的書籍,發現越看越有趣,當我看到自動顯示、隱藏佈局的ListView時,內心充滿了好奇和期待,因為即將就要解開我心中當年存在的一個迷,之前我剛接觸Android的時候,總是在想為什麼淘寶還有京東等一些APP可以實現自動顯示和隱藏頭佈局呢?今天我就發自內心地寫這篇部落格了!接下來就讓帶大家見證奇蹟的時刻了。
一、首先,給ListView新增一個HeaderView,避免第一個Item被頭佈局遮擋:
//1.給listview增加HeaderView View header = new View(this); header.setLayoutParams(new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, // 高度根據螢幕不一樣,大小不一 // (此處可以使用 R.dimen.abc_action_bar_default_height_material) (int) getResources().getDimension( R.dimen.abc_action_bar_default_height_material))); mlistview.addHeaderView(header);
二、定義變數設定listview最小滑動距離(系統獲取的)
//2.獲取系統認為的最低滑動距離
minInstance = ViewConfiguration.get(this).getScaledTouchSlop();
三、設定listview的滑動監聽事件,比較與上次座標的大小,即根據座標差來判斷滑動的方向,如果是向上滑動的話就隱藏頭佈局,向下滑動的話就設定顯示頭佈局:
//3.判斷滑動事件 mlistview.setOnTouchListener(new View.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 > minInstance) { status = 0; // 向下 } else { status = 1; // 向上 } if (status == 1) { if (mShow) { barAnim(1); // 隱藏 mShow = false; } } else { if (!mShow) { barAnim(0); // 顯示 mShow = true; } } break; } return false; } });
四、最後一步加上頭佈局的顯示、隱藏動畫的設定方法:
private void barAnim(int i) { if (animator != null && animator.isRunning()) animator.cancel(); if (i == 0) { animator = ObjectAnimator.ofFloat( titlebar, "translationY", titlebar.getTranslationY(), 0); }else{ animator = ObjectAnimator.ofFloat( titlebar, "translationY", titlebar.getTranslationY(), -titlebar.getHeight()); } animator.start(); }
就是這麼簡單,向下滑動 ListView ,其頂部佈局自動顯示;向上滑動 ListView ,其頂部的佈局自動隱藏!先給大家看看效果圖吧!
到此,大家可以可以簡單做個listview去實現一下效果,這裡的標頭檔案是用一個Textview寫的,如果大家要用toolbar的話,就要注意了,記得主題一定是要NoActionBar的,即:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
有需要完整原始碼的帥哥美女們,看這裡:Demo
更多精彩內容請
掃一掃關注我的微信公眾號:程式猿在廣東