来来来,先看下效果图~

这里有同学可能就已经想到了,这个不就是折叠式的toolbar实现的吗?对啊,我确实是这么做的,还是挺简单的,今天就给大家分享下code了,不过中间也遇到了些小插曲,比如:Toolbar上的文字不居中,分类不可点击等等。老规矩先上代码,跟着代码来分析总结。

布局文件

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/darkGrayBg"

android:fitsSystemWindows="true"

android:orientation="vertical">

android:id="@+id/title"

layout="@layout/toolbar_title_layout"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true">

android:id="@+id/appBarLayout"

android:layout_width="match_parent"

android:layout_height="256dp"

android:fitsSystemWindows="true"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

android:id="@+id/collapsingToolbarLayout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/darkGrayBg"

android:fitsSystemWindows="true"

app:contentScrim="@color/darkGrayBg"

app:expandedTitleMarginEnd="64dp"

app:expandedTitleMarginStart="48dp"

app:layout_scrollFlags="scroll|exitUntilCollapsed">

android:id="@+id/sortToolbar"

android:layout_width="match_parent"

android:layout_height="@dimen/dimen_40"

android:fitsSystemWindows="true"

app:contentInsetLeft="0dp"

app:contentInsetStart="0dp"

app:layout_collapseMode="pin"

app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

android:id="@+id/sortToolbar_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:gravity="center"

android:textColor="@color/white"

android:textSize="@dimen/font_size_14"/>

android:id="@+id/filter_sort_list"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:fitsSystemWindows="true"

app:layout_collapseMode="none"

app:layout_collapseParallaxMultiplier="0.7"/>

android:id="@+id/filter_sort_result_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

android:id="@+id/load_result_view"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

注意:

1、布局结构必须是CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar,否则无效果哦,这几个控件在前面的博客中我们详细为大家讲解过了,可以参考博客:

Materail Design 入门(八)——CollapsingToolbarLayout的使用方法

Materail Design 入门(七)——AppBarLayout的使用方法

Materail Design 入门(四)——Toolbar的使用方法(1)

2、CollapsingToolbarLayout中Toolbar和VpRecyclerView的顺序不能反了,否则,Recyclerview将不能点击,因为Toolbar将会覆盖在Recyclerview上方,导致Recyclerview点击事件不响应。

3、因为直接使用Toolbar,Toolbar的文字内容不居中,所以在Toolbar中嵌套TextView解决文字居中问题。

4、 app:contentInsetLeft=”0dp”

app:contentInsetStart=”0dp”

使Toolbar的内容居中

Java代码

private void initView() {

setTitle(getString(R.string.filter));

mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {

@Override

public void onStateChanged(AppBarLayout appBarLayout, State state) {

Log.d("STATE", state.name());

if (state == State.EXPANDED) { //展开状态

mSortToolbarTitle.setText("");

mFilterSortList.setVisibility(View.VISIBLE);

} else if (state == State.COLLAPSED) {//折叠状态

mSortToolbarTitle.setText(mFilterSortAdapter.getSortKey());

mFilterSortList.setVisibility(View.GONE);

} else { //中间状态

mSortToolbarTitle.setText("");

mFilterSortList.setVisibility(View.VISIBLE);

}

}

});

mFilterSortList.setLayoutManager(new LinearLayoutManager(this));

mFilterSortList.addItemDecoration(new RecycleViewDivider(this, R.drawable.line_divier));

mFilterSortList.setHasFixedSize(true);

mFilterSortAdapter = new FilterSortAdapter(this);

mFilterSortList.setAdapter(mFilterSortAdapter);

mFilterSearchtList.setLayoutManager(new GridLayoutManager(this, 3, GridLayoutManager

.VERTICAL, false));

mFilterSearchtList.setHasFixedSize(true);

mFilterSearchAdapter = new FilterSearchAdapter(this);

mFilterSearchtList.setAdapter(mFilterSearchAdapter);

mFilterSearchtList.setLoadingListener(new VpRecyclerView.LoadingListener() {

@Override

public void onRefresh() {

loadType = VpRecyclerView.REFRESH;

start = 0;

filterSearch();

}

@Override

public void onLoadMore() {

loadType = VpRecyclerView.LOADMORE;

start++;

filterSearch();

}

});

}

布局文件写对了基本上就完成了一大半了,java代码还是比较简单的,就是给标题和Recyclerview初始化赋值。这里需要注意的是何时展开Recyclerview何时折叠Recyclerview。这里我们给AppBarLayout添加一个监听事件:addOnOffsetChangedListener。根据他的state来控制Recyclerview的折叠和展开。

好了,讲解完了,本篇的目的还在于CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar的练习和应用哦。

android如何实现筛选功能,Android——仿优酷节目筛选功能实现相关推荐

  1. android仿疯狂猜图源码,Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】...

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和 ...

  2. android仿优酷菜单,Android编程实现仿优酷旋转菜单效果(附demo源码)

    本文实例讲述了Android编程实现仿优酷旋转菜单效果.分享给大家供大家参考,具体如下: 首先,看下效果: 不好意思,不会制作动态图片,只好上传静态的了,如果谁会,请教教我吧. 首先,看下xml文件: ...

  3. 高仿优酷Android客户端图片左右滑动(自动切换)

    本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能 ...

  4. Android 高仿优酷旋转菜单

    这是一个很早版本的优酷菜单,效果挺不错的,实现起来也挺简单的.废话不说,直接上代码: 首先是xml文件: <RelativeLayout xmlns:android="http://s ...

  5. Android仿优酷视频的悬浮窗播放

    Android仿优酷视频的悬浮窗播放 之前接了需求要让视频播放时可以像优酷视频那样在悬浮窗里播放,并且悬浮窗和主播放页面之间要实现无缝切换,项目中使用的是自封装的ijkplayer 这个要求就代表不能 ...

  6. android 优酷 自动全屏播放,Android如何实现仿优酷视频的悬浮窗播放效果

    Android如何实现仿优酷视频的悬浮窗播放效果 发布时间:2020-07-11 10:24:43 来源:亿速云 阅读:228 作者:清晨 这篇文章主要介绍Android如何实现仿优酷视频的悬浮窗播放 ...

  7. android浮窗播放器,Android仿优酷视频的悬浮窗播放效果

    之前接了需求要让视频播放时可以像优酷视频那样在悬浮窗里播放,并且悬浮窗和主播放页面之间要实现无缝切换,项目中使用的是自封装的ijkplayer 这个要求就代表不能在悬浮窗中新建视频控件,所以需要在悬浮 ...

  8. Android开发(17)-通过安卓API的Tabs3实现仿优酷tabhost效果

    课程还没有讲了多少,前两天老师就让自己写个视频播放器客户端,这个是他上课讲的一个小小demo,通过查看安卓API的tabs3,实现仿优酷视频客户端的tabhost效果.我的API路径是D:\andro ...

  9. Android Tv端仿优酷酷喵——播放界面下拉弹出选项窗

    自己写了一个Andorid TV端动画实例,主要是仿优酷酷喵里的下拉弹窗的效果,如下图: 这里把弹框写成了一个弹出的dialog,把dialog的背景设成黑色半透明,然后在activity中监听下键弹 ...

最新文章

  1. Keil代码整体偏移和查找功能
  2. Android 卡片翻转动画效果
  3. Wince6 RIL层移植
  4. asp连接不到我mysql里_ASP连接MYSQL问题点解决
  5. 激光SLAM学习--移动机器人技术系列课(智东西)
  6. .NET 指南:许可请求
  7. onclick 拼接时如何传递json对象
  8. 微信公众平台客户端调试工具
  9. lte 在网络覆盖方面应该注意哪些问题_TD-LTE网络深度覆盖三个受限因素及四大解决策略...
  10. [论文]论文的一般结构
  11. vim can not open syntax.vim 解决方法
  12. 测试用例设计方法-正交试验常用正交表
  13. uni-app做收货地址功能
  14. 转发-分享手机游戏辅助编程开发教程
  15. 安庆集团-冲刺日志(第二天)
  16. NPOI导出Excel 65536限制
  17. Linux防止stack缓冲区溢出的有效方法
  18. 利用STM32CubeMX软件生成USB_DEVICE_SD卡虚拟U盘
  19. Mac Xcode opencv C++环境配置 保姆级教程 填坑记录 19年最新版本
  20. arcgis里dem填洼_ArcGIS水文分析实战教程(4)地形预处理

热门文章

  1. Unity小狐狸学习日志、关于角色创立,移动控制以及跳跃动画等方面
  2. Vulkan开启显卡特性如各向异性过滤等
  3. 小程序学习之路(持续更新)
  4. 如何在VMware中使用CDR文件启动磁盘?(整机菜鸟来这里!)
  5. STM32学习笔记-L298N驱动模块-电机
  6. malloc申请内存问题
  7. 游戏中暴击/抽卡保底 概率研究 《转载》
  8. 【vscode】FILE提示报错及未有FILE代码提示问题
  9. leetcode 第294场周赛题解
  10. Finclip车载小程序提供最优解决方案