如何使用Android实现知乎选项卡动态隐藏效果

  介绍

这篇文章主要介绍了如何使用Android实现知乎选项卡动态隐藏效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>前言

因为最近手上项目也是资讯阅读类,简书,掘金,知乎的效果都想往项目上加,没事就来仿写。

如何使用Android实现知乎选项卡动态隐藏效果”> <br/>选项卡动态隐藏。gif </p> <p>效果呢,和知乎首页一样,可以去知乎看看,点击回键可以返回顶部。下面话不多说了,来一起看看详细的介绍吧。</p> <p> <强>想法:</强> </p> <ul类= <李>

列表上拉,选项卡隐藏,下滑出现;recycleView滚动监听(OnScrollListener)中onScrolled方法的dy参数,dy> 0表示上拉,dy<0表示下滑,刚好合适。

<李>

选项卡怎么隐藏呢,属性动画,移动选项卡的相对位置View.TRANSLATION_Y (Y轴方向移动肯定是_Y吗),视图。翻译系列都是相对运动,参考系原是视图本的位置。

<李>

还有个问题,对于选项卡来说,它需要的显隐时机是列表滑动方向改变,而不是只监听它的滑动;上拉改下,滑下滑改上拉这2个时机才能执行动画,不能在列表同一方向持续滚动时重复调用动画。

<强>步骤:

要写多少代码呢? fragmeng中一个recycleView的监听要写,一个接口要写;活动中接口实现。没了,代码不多。

片段:

public  interface  RvScrollListener  {   ,//滑动方向监听   ,void  scrollType (boolean 方向);   ,//是否滑动到顶部监听   ,void  inTop (boolean 顶部,RecyclerView  recyclerView);   }      时间=private  RecyclerView.OnScrollListener  mOnScrollListener  new  RecyclerView.OnScrollListener (), {   ,@Override   ,public  void  onScrollStateChanged (RecyclerView  recyclerView, int  newState), {   super.onScrollStateChanged才能(recyclerView, newState);   if 才能;(fragmentposition  !=, 0), {   ,,//如果不是第一个片段则返回   ,才能回报;   ,,}   LinearLayoutManager 才能;layoutManager =, (LinearLayoutManager), recyclerView.getLayoutManager ();//得才能到当前列表第一个完全显示的物品的位置   int 才能;position =, layoutManager.findFirstCompletelyVisibleItemPosition ();   if 才能;(position ==, 0), {   ,,//如果位置为0表示列表正处于顶部   ,,mRvScrollListener.inTop(真的,,recyclerView);   ,,},{else    ,,mRvScrollListener.inTop(假,recyclerView);   ,,}   ,}      ,@Override   ,public  void  onScrolled (RecyclerView  recyclerView, int  dx, int  dy), {   super.onScrolled才能(recyclerView, dx, dy);//才能判断滑动方向,recycleView  item 上拉,下滑不同动画   if 才能;(dy 祝辞,0),{   ,,isUp =,真的;   ,,},{else    ,,isUp =,假;   ,,}      if 才能;(fragmentposition  !=, 0), {   ,才能回报;   ,,//如果不是第一个片段则返回   ,,}//才能过滤掉一些缓慢的滑动   if 才能;(Math.abs (dy),祝辞,10),{   ,,//滑动方向   ,,mRvScrollListener.scrollType (dy 祝辞,0);   ,,}   ,}   };

recycleView第一个监听方法:

@Override   public  void  onScrollStateChanged (RecyclerView  recyclerView, int  newState), {}

这个里面就做一件事情,判断当前recycleView是否滑动到顶部,然后通过接口传递到活动中,当点回击键时,如果不在顶部,则调用方法滚动到顶部。

recycleView第二个监听方法:

@Override   public  void  onScrolled (RecyclerView  recyclerView, int  dx, int  dy), {}

做2件事,一是recyleView的项目做动画时,因为上拉和下滑动画不一样,代码中isUp就是用来区分上拉下滑的((给recycleView的项目做加载动画使用)),

二是判断滑动方向,接口传递到活动中。

活动:

//上拉状态=private  boolean  hasup 真实;//下滑状态=private  boolean  hasdown 真实;//是否在顶部=private  boolean  inTop 真实;//从片段传递过来的recycleView   private  RecyclerView  topRecyclerView;   BlankFragment.RvScrollListener  mRvScrollListener =, new  BlankFragment.RvScrollListener (), {      ,@Override   ,public  void  scrollType (boolean 方向),{//才能上拉   if 才能;(方向),{   ,,hasdown =,真的;   ,,//连续上拉,第一次有效   ,,if  (hasup), {   ,,,ObjectAnimator.ofFloat (mTablayout, View.TRANSLATION_Y,, mTablayout.getTranslationY (),, PixelChange.dp2px (XjwTablayoutActivity.this, 50)) .setDuration (400) .start ();   ,,,hasup =,假;   ,,}   ,,},else {//下滑   ,,hasup =,真的;   ,,//连续下滑,第一次有效   ,,if  (hasdown), {   ,,,ObjectAnimator.ofFloat (mTablayout, View.TRANSLATION_Y,, mTablayout.getTranslationY (),, 0) .setDuration (400) .start ();   ,,,hasdown =,假;   ,,}   ,,}   ,}      ,@Override   ,public  void  inTop (boolean ,, RecyclerView  recyclerView), {   时间=inTop 才能;最高;   时间=topRecyclerView 才能;recyclerView;   ,}   };      @Override   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用Android实现知乎选项卡动态隐藏效果