国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

神奇的listView實現自動顯示隱藏布局Android代碼

2019-12-12 05:15:23
字體:
來源:轉載
供稿:網友

借助View的OnTouchListener接口來監聽listView的滑動,通過比較與上次坐標的大小,判斷滑動方向,并通過滑動方向來判斷是否需顯示或者隱藏對應的布局,并且帶有動畫效果。

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為系統ActionBar的高度

定義一個mTouchSlop變量,獲取系統認為的最低滑動距離

復制代碼 代碼如下:
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//系統認為的最低滑動距離
      

判斷滑動事件

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的高度,要用下面這種方法,把任務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一樣

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黔江区| 兖州市| 务川| 仪陇县| 阳谷县| 长垣县| 南昌县| 闸北区| 车险| 防城港市| 凭祥市| 张家港市| 荆门市| 中宁县| 张掖市| 天津市| 承德市| 抚远县| 双江| 榆林市| 洛扎县| 子洲县| 邯郸县| 资源县| 苏尼特左旗| 莲花县| 蒙阴县| 大荔县| 天津市| 麻阳| 长白| 楚雄市| 水城县| 上林县| 巴东县| 榆社县| 南川市| 金秀| 客服| 玉屏| 南溪县|