編輯:關於android開發
借助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一樣
Android基礎01 快速入門 & 布局,android01快速入門Android基礎01 快速入門 & 布局 01.01 手機制式 第一代
Android studio圖片ERROR: 9-patch image xx .9.png malformed Android studio 圖片錯誤 9-patc
Android之RecyclerView(二),androidrecyclerview 上篇文章對RecyclerView的使用做了簡單的介紹,本篇文章將繼續介紹。Re
教你如何將小視頻轉發到自己的朋友圈,視頻轉發朋友圈1、首先,先在朋友圈中查看小視頻,點擊發送朋友,通過文件傳輸助手發送到電腦上, 2、打開電腦上的WeChat Files