Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 自動顯示隱藏布局的listView,自動顯示listview

自動顯示隱藏布局的listView,自動顯示listview

編輯:關於android開發

自動顯示隱藏布局的listView,自動顯示listview


 

 

借助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一樣

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved