原理就是滑动中改变透明度;

核心代码:

rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
} @Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
ScrollUnm = ScrollUnm + dy; //滑动距离总合
Log.i("dy",dy+"");
Log.i("overallXScroll",ScrollUnm+"");
if (ScrollUnm<=0){ //在顶部时完全透明
tv.setBackgroundColor(Color.argb((int) 0, 255,41,76));
}else if (ScrollUnm>0&&ScrollUnm<=height){ //在滑动高度中时,设置透明度百分比(当前高度/总高度)
double d = (double) ScrollUnm / height;
double alpha = (d*255);
tv.setBackgroundColor(Color.argb((int) alpha, 255,41,76));
}else{ //滑出总高度 完全不透明
tv.setBackgroundColor(Color.argb((int) 255, 255,41,76));
}
}
});

完整代码:

package com.example.admin.titlebargradient;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; import java.util.Arrays;
import java.util.List; /**
* CCB 版权所有 翻版必究 嘻嘻嘻
*/
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
private TextView tv;
private List<String> data;
private int height = 640; // 滑动到什么地方完全变色
private int ScrollUnm = 0; //滑动的距离总和 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = findViewById(R.id.rv);
tv = findViewById(R.id.tv);
initData();
} private void initData() {
data = Arrays.asList("嗯嗯","啊啊","哦哦","呵呵","嘻嘻","哈哈","嘎嘎","嘿嘿","哼哼","哇哇","啪啪","嗝");
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
rv.setLayoutManager(linearLayoutManager);
rv.setAdapter(new MyAdapter(this,data));
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
} @Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
ScrollUnm = ScrollUnm + dy; //滑动距离总合
Log.i("dy",dy+"");
Log.i("overallXScroll",ScrollUnm+"");
if (ScrollUnm<=0){ //在顶部时完全透明
tv.setBackgroundColor(Color.argb((int) 0, 255,41,76));
}else if (ScrollUnm>0&&ScrollUnm<=height){ //在滑动高度中时,设置透明度百分比(当前高度/总高度)
double d = (double) ScrollUnm / height;
double alpha = (d*255);
tv.setBackgroundColor(Color.argb((int) alpha, 255,41,76));
}else{ //滑出总高度 完全不透明
tv.setBackgroundColor(Color.argb((int) 255, 255,41,76));
}
}
});
} class MyAdapter extends RecyclerView.Adapter<MyAdapter.Vh>{
private List<String> datas;
private Context context;
public MyAdapter(Context context,List datas) {
this.datas = datas;
this.context = context;
} @Override
public Vh onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context,R.layout.layout_item,null);
return new Vh(view);
} @Override
public void onBindViewHolder(Vh holder, int position) {
holder.tv.setText(datas.get(position).toString());
} @Override
public int getItemCount() {
return datas.size();
} class Vh extends RecyclerView.ViewHolder{
TextView tv;
public Vh(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
}
}

Xml布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="48dp"
android:textColor="#ededed"
android:text="没错就是我"
android:gravity="center"
android:textSize="16dp"
android:background="#00ff294c"
/> </RelativeLayout>

滑动的百分比,就是透明度的百分比;完整代码请看GitHub;

完整代码:https://github.com/CuiChenbo/TitlebarGradient

Android标题头滑动渐变,Titlebar滑动渐变,仿美团饿了么标题头渐变;的更多相关文章

  1. Android开发之多级下拉列表菜单实现(仿美团,淘宝等)

    注:本文转载于:http://blog.csdn.net/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到 ...

  2. Android开发:仿美团下拉列表菜单,帮助类,复用简单

    近期在项目中须要用到下拉菜单.公司比較推崇美团的下拉菜单,于是要实现该功能.想着.这个功能应该是一个常常会用到的.于是何不写一个帮助类,仅仅要往这个类里面传入特定的參数,既能够实现下来菜单,并且还能够 ...

  3. WPF 背景颜色渐变的滑动条实现

    原文:WPF 背景颜色渐变的滑动条实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83507 ...

  4. Android ViewPager再探:增加滑动指示条

    上一篇:<Android ViewPager初探:让页面滑动起来> ViewPager只是左右滑动有些丑,也不知道当前位于第几页面. 可以在上方加入滑动指示条,来确定当前位置. 只需要修改 ...

  5. Android ViewPager初探:让页面滑动起来

    下一篇:<Android ViewPager再探:增加滑动指示条> ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写: instantiateItem(Vi ...

  6. Android:使用ViewPager实现左右滑动切换图片(图上有点点)

    在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...

  7. Android:使用ViewPager实现左右滑动切换图片 (简单版)

    ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...

  8. Android 使用ViewPager实现左右循环滑动图片

    ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1.    首先看一 ...

  9. Android ViewFlipper增添ScrollView后不能滑动了

    Android ViewFlipper添加ScrollView后不能滑动了在Activity中添加ScrollView实现滚动activity的效果后,activity的滑动效果却无法生效了,原因是因 ...

随机推荐

  1. redis 的 docker 镜像使用

    redis 镜像使用: 创建容器(暴露端口:6379,使用 Redis 可视化界面工具(如:Fastoredis)连接 redis 时连接该端口): docker run -it -p 6379:63 ...

  2. TypeScript 之 泛型

    https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Generics.html 泛型:可以支持多种类型的数据 泛型函数的 ...

  3. PyCharm 设置Python 文件头部模板

    1. 菜单栏-> File -> Settings -> Editor -> File and Code Templates ->Python Script 2.配置头文 ...

  4. 基于MVC4+EasyUI的Web开发框架形成之旅(6)--基类控制器CRUD的操作

    在上一篇随笔中,我对Web开发框架的总体界面进行了介绍,其中并提到了我的<Web开发框架>的控制器的设计关系,Web开发框架沿用了我的<Winform开发框架>的很多架构设计思 ...

  5. mysql的变量信息详解

    mysql的变量详解 执行show variables命令可以查看MySQL服务器的变量 变量名 默认值 说明 对应的配置文件参数 auto_increment_increment 1 自增长类型的初 ...

  6. 基于mysql对mybatis中的foreach进行深入研究

    鉴于上一篇博文一次修改mysql字段类型引发的技术探究提到的,要对foreach里面的collection相关的内容做一些介绍,今天就围绕foreach,做一些数据插入和查询相关的研究. 首先介绍一下 ...

  7. SQL 行列转置

    ),),[Score] int) Insert Class union all union all union all union all union all union all union all ...

  8. [蓝桥杯]ALGO-81.算法训练_动态数组使用

    从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出.要求尽可能使用函数实现程序代码.平均值为小数的只保留其整数部分. 样例输入: 样例输出: 样例输入: 样例输出: 题目 ...

  9. bzoj4948: World Final2017 A

    求简单多边形内的最长线段长度 显然存在一组最优解,使其所在直线经过多边形的两个端点,枚举这两个端点,求出直线和多边形的有效交点,从而得出直线有哪些部分在多边形内(含边界). 由于多边形的一些边可能与直 ...

  10. C#实现mongodb自增列的使用

    创建一个集合存放_id db.createCollection("counters") 加入需要自增的字段 { "_id":"productid&qu ...