现在很多app都有toolbar随着界面的滑动而进行变色的效果,无论是交互还是效果感觉都比较不错,现进行下尝试

效果图:

toolbar变色一般界面都是采用沉浸式,即透明状态栏,这里说两种实现方式:

1. toolbar随scrollview、RecyclerView滑动进行变色

这种布局相对不受限制,自由度更高一些

2. 采用coordinatelayout+appbarlayout+CollapsingToolbarLayout+toolbar+RecyclerView

toolbar跟随appbarlayout视差滚动进行颜色的变化,效果上更顺滑些,但是感觉布局有些受限制

首先是沉浸式打造:

activity theme:

<style name="AppTheme.NoActionBar"><item name="windowNoTitle">true</item><item name="windowActionBar">false</item>
<!--<item name="android:windowTranslucentStatus">true</item>-->
</style>

在界面设置:

//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

就可以实现状态栏透明了,这里状态栏透明后,原先属于状态栏的高度也没有了,布局里边要注意下,可以在原先的布局中加上状态栏的高度,这样看起来就正常了。

先说第一种:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:layout_width="match_parent"android:layout_height="wrap_content"><androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent"android:layout_height="match_parent" android:id="@+id/recycler"/></androidx.swiperefreshlayout.widget.SwipeRefreshLayout><androidx.appcompat.widget.Toolbar android:layout_width="match_parent"android:layout_height="76dp"app:contentInsetStart="0dp"android:id="@+id/toolbar"><TextView android:layout_width="match_parent" android:layout_height="match_parent"android:paddingTop="20dp" android:text="List" android:textStyle="bold"android:id="@+id/tv_title"/></androidx.appcompat.widget.Toolbar></RelativeLayout>

利用后设置的布局会遮挡前边的布局,然后toolbar跟随RecyclerView变色就能做出效果了。

界面:

/*** 沉浸式状态栏+toolbar变色实现二*/
class ToolbarActivity2 : AppCompatActivity() {private val mAdapter by lazy {BaseAdapter(DataUtil.getStringData())}private val manager by lazy {LinearLayoutManager(this@ToolbarActivity2)}private var header_hight: Int = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_toolbar2)//透明状态栏window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)val header = layoutInflater.inflate(R.layout.item_header, null)header.run {mAdapter.addHeaderView(header)post {header_hight = this.height / 2}}recycler.run {layoutManager = manageradapter = mAdapteraddOnScrollListener(scrollListener)}}private var scrollY = 0private val scrollListener = object : RecyclerView.OnScrollListener() {override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {scrollY += dyif (scrollY <= 0) {
//                toolbar.setBackgroundResource(android.R.color.transparent)
//                tv_title.setText("")} else if (scrollY > 0 && scrollY < header_hight) {val fraction = scrollY * 1f / header_highttoolbar.setBackgroundColor(changeAlpha(resources.getColor(R.color.colorPrimary), fraction))tv_title.setTextColor(changeAlpha(resources.getColor(android.R.color.white), fraction))} else if (scrollY >= header_hight) {toolbar.setBackgroundResource(R.color.colorPrimary)tv_title.setText("List")}}}/*** 根据百分比修改颜色透明度*/fun changeAlpha(color: Int, fraction: Float): Int {val red = Color.red(color)val green = Color.green(color)val blue = Color.blue(color)val alpha = (Color.alpha(color) * fraction).toInt()return Color.argb(alpha, red, green, blue)}
}

代码比较清晰,不再赘述。

方式二:

布局:

<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent"android:layout_height="250dp" android:id="@+id/appbar"><com.google.android.material.appbar.CollapsingToolbarLayout android:layout_width="match_parent"android:layout_height="match_parent"app:layout_scrollFlags="scroll|exitUntilCollapsed"><ImageView android:layout_width="match_parent" android:layout_height="match_parent"android:background="@drawable/banner1" app:layout_collapseMode="parallax"/><androidx.appcompat.widget.Toolbar android:layout_width="match_parent"android:layout_height="76dp" android:id="@+id/toolbar"app:layout_collapseMode="pin" app:contentInsetStart="0dp"android:background="@color/colorPrimary"><TextView android:layout_width="match_parent" android:layout_height="match_parent"android:paddingTop="20dp" android:text="爱花草" android:gravity="center"android:textColor="@android:color/white"/></androidx.appcompat.widget.Toolbar></com.google.android.material.appbar.CollapsingToolbarLayout></com.google.android.material.appbar.AppBarLayout><androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent"android:layout_height="match_parent" android:id="@+id/recycler"app:layout_behavior="@string/appbar_scrolling_view_behavior"/></androidx.coordinatorlayout.widget.CoordinatorLayout>

界面:

class ToolbarActivity : AppCompatActivity() {private val mAdapter by lazy {SimpleAdapter(this, DataUtil.getStringData())}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_toolbar)//透明状态栏window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)appbar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, i ->val fraction = Math.abs(i * 1.0f) / appBarLayout.totalScrollRangeval color = changeAlpha(resources.getColor(R.color.colorPrimary), fraction)toolbar.setBackgroundColor(color)})recycler.run {layoutManager = LinearLayoutManager(this@ToolbarActivity)adapter = mAdaptermAdapter.setOnItemClickListener(object : SimpleAdapter.OnItemClickListener {override fun onItemClick(v: View, position: Int) {Toast.makeText(this@ToolbarActivity, "pos:${position}", Toast.LENGTH_SHORT).show()}})}}/*** 根据百分比修改颜色透明度*/fun changeAlpha(color: Int, fraction: Float): Int {val red = Color.red(color)val green = Color.green(color)val blue = Color.blue(color)val alpha = (Color.alpha(color) * fraction).toInt()return Color.argb(alpha, red, green, blue)}
}

以上

Toolbar滑动变色相关推荐

  1. 网页按钮滑动变色与按钮光影效果的实现

    网页按钮滑动变色与按钮光影效果的实现 基于chrome,不支持IE与Edge 网页按钮滑动变色与按钮光影效果的实现 网页按钮滑动变色与按钮光影效果的实现 前言:涉及知识点 原理: 知识点解释 1.重塑 ...

  2. 鼠标滑动变色(discolor)

    鼠标滑动变色 示例 HTML CSS JS 更多有趣示例 尽在 知屋安砖社区 示例 HTML <div id="photo-container"> <div cl ...

  3. Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解

    CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果. 有童鞋看了之前的文章反馈对AppBarLayout中的scro ...

  4. PS改变icon图标颜色

    在项目中经常会遇到要改变图标的颜色,比如说我遇到的这个,要求默认状态下图标为蓝色,当鼠标放在图标上时,图标变为橙色,当然这些事情都是设计的事情,由于我做练习的psd图不是很全,很多事情得自己上手,在这 ...

  5. 8CollapsingToolbarLayout源码分析

    8CollapsingToolbarLayout源码分析 本文针对上篇文章进行源码分析 纯色Toolbar滑动 最简单代码 先从最简单的看起 <!--这里必须要写fitsSystemWindow ...

  6. Flutter 所有控件widget(持续更新)

    各种widget列表: MaterialApp类:MaterialApp:代表Material设计风格的应用,添加了特定风格的属性.title, theme, color, home, routes, ...

  7. Android视频直播APP-WliveTV

    我的视频课程:<FFmpeg打造Android万能音频播放器> 基于ijkplayer的视频直播软件(github:https://github.com/wanliyang1990/Wli ...

  8. android tab 悬停效果代码,Android 仿腾讯应用宝 之 Toolbar +Scroolview +tab滑动悬停效果...

    Android 仿腾讯应用宝 之 Toolbar +Scroolview +tab滑动悬停效果 来源:互联网 作者:佚名 时间:2015-02-10 15:36 Android 仿腾讯应用宝 之 To ...

  9. Android透明到白色滑动渐变,Android中Toolbar随着ScrollView滑动透明度渐变效果实现...

    Android中Toolbar随着ScrollView滑动透明度渐变效果实现 一.思路:监听ScrollView的滑动事件 不断的修改Toolbar的透明度 二.注意 1.ScrollView 6.0 ...

最新文章

  1. 话里话外:浅淡对流程管理的认识及流程管理对企业价值
  2. JQuery 选择器处理特殊字符
  3. python urllib.request 爬虫 数据处理-运维学python之爬虫基础篇(二)urllib模块使用...
  4. Luogu4926 倍杀测量者(二分答案+差分约束)
  5. wps打包exe文件_如何使用PTEmaker将PPT打包为exe可执行文件(图文) - 电脑教程
  6. mongodb存入mysql_关于mongodb转存MySQL
  7. 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?
  8. 『数据库』朴实无华且枯燥的数据库文章--关系数据理论
  9. 嵊州D5T2 折纸 folding
  10. 互联网日报 | 北斗三号全球卫星导航系统正式开通;拼多多上线首届“真香节”;海尔电器私有化草案出炉...
  11. 现在是小程序最好的时代
  12. 计算机科学与技术大学生职业规划,计算机科学与技术大学生职业生涯规划ppt
  13. Sketch vs. Figma vs. adobe xd:哪个设计工具最适合初学者?
  14. pythontime库简单使用_Python time库基本使用方法分析
  15. 【1】ArcGIS API for JavaScript 4.5/4.6 本地部署
  16. 码云html页面预览,码云,正式支持 Pages 功能,可以部署静态页面
  17. 在境内服务器、虚拟主机上运行未备案域名方法,cf worker反向代理
  18. html登陆没反应,ipad屏幕输入密码没反应
  19. 如何申请开通个人邮箱?
  20. 好东西,就要一起分享。

热门文章

  1. AppScan的用法
  2. Vmware虚拟机网络模式原理及配置详解
  3. java calendar 设置小时_Java Calendar.set 方法设置时间的问题
  4. 【汇正财经】按公司业绩分类股票有哪些?
  5. antd-vue上传文件,并读取文件内容
  6. (血泪篇)MySQL 5.7首登及修改密码--2020.8.18
  7. linux查看有多少内核,linux上查看cpu和内核的个数
  8. 国产软件爆发 中国版Navicat,SQL Studio成数据库管理工具热门
  9. 动画交互应用——神秘力量
  10. [高可用系列|LVS]LVS详解