作为一名热爱学习的Android开发工程si,刷微博的时候居然还想着技术呢,觉得自己也是够够了........哈哈哈

image.png

进入今天的正题,微博主页大家肯定是看过的,先看一下微博的效果。
(小提示:该Demo是采用kotlin语言编写的,需要配置Kotlin开发环境哦!)

wb.gif

微博的效果大家都看到了,先看看这标题栏悬停的效果。实现方式很多种,我的思路很简单:顶部有一个默认隐藏的标题栏在上面,然后通过计算ScrollView向上滑动的距离,动态控制头部标题导航栏的显示隐藏。
简单分析一下页面布局的结构:

image.png

页面布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/parent_view"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ScrollViewandroid:id="@+id/scrollView"android:layout_width="match_parent"android:layout_height="match_parent"android:fillViewport="true"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_img"android:layout_width="match_parent"android:layout_height="200dp"android:scaleType="fitXY"android:src="@mipmap/bg_wb" /><includeandroid:id="@+id/ll_tab"layout="@layout/layout_suspencial_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/iv_img"></include><FrameLayoutandroid:id="@+id/fl_container"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/ll_tab"></FrameLayout></RelativeLayout></ScrollView><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tv_title_text"android:layout_width="match_parent"android:layout_height="35dp"android:gravity="center"android:text="歌手李健"android:textColor="#ffffff"android:textSize="18sp" /><Viewandroid:id="@+id/title_divider"android:layout_width="match_parent"android:layout_height="1dp"android:layout_below="@+id/tv_title_text"android:background="#e6e6e6"android:visibility="gone"></View><!--悬停导航标题栏--><includeandroid:id="@+id/ll_sus_tab"layout="@layout/layout_suspencial_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/title_divider"android:visibility="invisible"></include></RelativeLayout></FrameLayout></RelativeLayout>

设置标题栏导航栏悬停和标题栏渐变的核心代码:给ScrollView设置滑动的监听

scrollView.setOnScrollViewListener(object : MyScrollView.OnScrollViewListener {override fun onScrollChanged(scrollX: Int, scrollY: Int, oldx: Int, oldY: Int) {//如果向上滑动的距离>=iv_img.height - tv_title_text.height,隐藏的标题导航栏设置显示var distanceScrollY = iv_img.height - tv_title_text.heightif (scrollY >= distanceScrollY) {ll_sus_tab.visibility = View.VISIBLE
//                    ll_tab.visibility = View.INVISIBLEtitle_divider.visibility = View.VISIBLE} else {ll_sus_tab.visibility = View.INVISIBLE
//                    ll_tab.visibility = View.VISIBLEtitle_divider.visibility = View.GONE}//设置标题栏渐变if (scrollY <= 0) {//初始位置:未滑动时,设置标题背景透明tv_title_text.setBackgroundColor(Color.TRANSPARENT)tv_title_text.setTextColor(Color.WHITE)} else if (scrollY > 0 && scrollY <= distanceScrollY) {var scale: Float = (scrollY.toFloat()) / distanceScrollYvar alpha: Float = 255 * scaletv_title_text.setBackgroundColor(Color.argb(alpha.toInt(), 255, 255, 255))tv_title_text.setTextColor(Color.argb(alpha.toInt(), 0, 0, 0))} else {tv_title_text.setBackgroundColor(Color.argb(255, 255, 255, 255))tv_title_text.setTextColor(Color.argb(255, 0, 0, 0))}
//}})

最后实现的效果:

re.gif

注意注意注意了:如果使用原生ScrollView,会报如下的警告,如果你是用API大于等于23(Android6.0)的手机测试,不会有什么问题,程序正常运行。但是要是低于这个版本的手机,就会导致奔溃,报 java.lang.NoClassDefFoundError:

image.png

解决办法很简单,就是自定义一个ScrollView,写一个接口将onScrollChange()暴露出去。
源码下载请戳: https://github.com/zj593743143/WeiboDetail_Demo

ScrollView滑动—仿微博主页标题栏渐变悬浮及Fragment实现多个内容页面切换相关推荐

  1. ScrollView仿微博主页标题栏悬停渐变及Fragment实现多个内容页面切换

    作为一名热爱学习的Android开发工程si,刷微博的时候居然还想着技术呢,觉得自己也是够够了........哈哈哈 进入今天的正题,微博主页大家肯定是看过的,先看一下微博的效果. (小提示:该Dem ...

  2. 顶部布局随ScrollView滑动透明度渐变(QQ空间效果)

    QQ控件顶部的工具条在整体的ScrollView从顶部滑动时会从透明逐渐变为solid纯色:虽然有人实现过 ActionBar随ScorllView上下拖动而透明度渐变效果 以及 仿QQ空间滚动Act ...

  3. Android带你解析ScrollView--仿QQ空间标题栏渐变

    绪论 今天来研究的是ScrollView-滚动视图,滚动视图又分横向滚动视图(HorizontalScrollView)和纵向滚动视图(ScrollView),今天主要研究纵向的.相信大家在开发中经常 ...

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

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

  5. [iOS]仿微博视频边下边播之滑动 TableView 自动播放

    注意:框架已经迭代到2.0版本,我重新架构了整个框架,API 也得到了更好的设计,我为 2.0 版本的实现写了一篇文章 [iOS]如何重新架构 JPVideoPlayer ?.此文中的实现思路仍然是一 ...

  6. [iOS]仿微博视频边下边播之滑动TableView自动播放

    Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器. 02.[iOS]仿微博视频边下边播之滑动TableView自 ...

  7. html滑动仿悬浮球菜单

    html滑动仿悬浮球菜单 css样式 html代码 javascript代码 css样式 html,body{width: 100%;height: 100%;margin: 0;padding: 0 ...

  8. html设置悬浮效果,html滑动仿悬浮球菜单效果的实现-电脑自学网

    css样式 html,body{ width: 100%; height: 100%; margin: 0;padding: 0; } /*导航图标*/ .NMH-g-navicon{ positio ...

  9. HTML页面悬浮球,html滑动仿悬浮球菜单效果的实现

    这篇文章主要介绍了html滑动仿悬浮球菜单效果的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 css样式: html,body{ widt ...

最新文章

  1. python装饰器作用-如何理解Python装饰器?
  2. C#委托及事件 详解(讲得比较透彻)
  3. mysql命令集合,MySql常用命令集合
  4. Mercury LoadRunner
  5. treeselect只选了分支节点全选_vue Treeselect 树形下拉框:获取选中节点的ids和lables操作...
  6. UVa 11998 破碎的键盘(数组实现链表)
  7. 2015年关注的技术书籍
  8. 大数据学习笔记20:MR案例——按电影热度值排序
  9. MySQL的InnoDB存储引擎
  10. 超市在线购物商城源码分享
  11. 基于matlab直方图均衡,matlab 直方图均衡实验报告.pdf
  12. mysql 查询开始时间和结束时间是一个月的数据sql
  13. booster 框架学习(一)
  14. python比较火的培训机构
  15. 12306排队是什么意思_12306的排队机制是什么样的?
  16. AcWing 2041:干草堆(差分)
  17. PMP模拟试题与解析(四)
  18. Game Maker:一款教学工具造就了一批独立开发者
  19. 【gradle Composing builds】gradle依赖管理Composing builds之杂症-快速同步
  20. hadoop完全分布+hive数据分析

热门文章

  1. vector构造函数的使用
  2. 在Ubuntu环境把PPT和Word转换为swf文件
  3. 电子商务中的社会化营销逻辑 三个成功案例的启发
  4. 【毕业生】资历与跳槽
  5. AutoEventWireup=false导致Page_Load事件未执行
  6. 什么是微型计算机的核心软件,微型计算机的核心部件是()。
  7. 银行家算法(Banker's Algorithm)
  8. RBF神经网络与BP神经网络的比较
  9. 爱美食android源代码,爱料理app下载
  10. 专访腾讯蒋杰:深度揭秘腾讯大数据平台