Android标题头滑动渐变,Titlebar滑动渐变,仿美团饿了么标题头渐变;
原理就是滑动中改变透明度;
核心代码:
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滑动渐变,仿美团饿了么标题头渐变;的更多相关文章
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
注:本文转载于:http://blog.csdn.net/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到 ...
- Android开发:仿美团下拉列表菜单,帮助类,复用简单
近期在项目中须要用到下拉菜单.公司比較推崇美团的下拉菜单,于是要实现该功能.想着.这个功能应该是一个常常会用到的.于是何不写一个帮助类,仅仅要往这个类里面传入特定的參数,既能够实现下来菜单,并且还能够 ...
- WPF 背景颜色渐变的滑动条实现
原文:WPF 背景颜色渐变的滑动条实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83507 ...
- Android ViewPager再探:增加滑动指示条
上一篇:<Android ViewPager初探:让页面滑动起来> ViewPager只是左右滑动有些丑,也不知道当前位于第几页面. 可以在上方加入滑动指示条,来确定当前位置. 只需要修改 ...
- Android ViewPager初探:让页面滑动起来
下一篇:<Android ViewPager再探:增加滑动指示条> ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写: instantiateItem(Vi ...
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
- Android 使用ViewPager实现左右循环滑动图片
ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一 ...
- Android ViewFlipper增添ScrollView后不能滑动了
Android ViewFlipper添加ScrollView后不能滑动了在Activity中添加ScrollView实现滚动activity的效果后,activity的滑动效果却无法生效了,原因是因 ...
随机推荐
- 轻量级web框架cicada----(转)
源码地址: https://github.com/TogetherOS/cicada 快速启动 下面来看看如何快速启动一个 HTTP 服务. 只需要创建一个 Maven 项目,并引入核心包. < ...
- Quest for sane signals in Qt - step 1 (hand coding a Q_OBJECT)
探索qt的信号ref: http://crazyeddiecpp.blogspot.hk/2011/01/quest-for-sane-signals-in-qt-step-1.html If it ...
- thinkphp5 列表页数据分页查询2-带搜索条件
一.控制器部分 <?php namespace app\user\controller; use app\index\controller\Common; use app\user\model\ ...
- 八、springboot(五)配置定时器
1.修改启动类 @SpringBootApplication @EnableScheduling public class DemoApplication { public static void m ...
- excel技巧--一键求和
类似于上图的表格,我们要得到右侧和下侧栏的汇总结果,通常可以用sum公式加下拉方式,但是还有一种方法更快速,那就是使用 ALT + “+=”组合键就能一下子得到所有汇总结果.(+=键,就是一个键,该键 ...
- 解决“chrome adobe flash player不是最新版本”的方法
chrome地址栏输入chrome://components 更新flash后,重启chrome即可,可能需要搭梯子才能更新.
- js跨域调用mvc ActionResult扩展
背景 最近2个项目中都用到了js跨域访问的知识,2个项目都需要主站与各个分站之间进行数据交互.状态同步等相关操作.浏览器本身是不允许进行跨域访问,在MVC中我们可以扩展一个方法来实现这个功能.在此大家 ...
- 在CAD二次开发中使用进度条
ProgressMeter pm = new ProgressMeter(); pm.Start("正在执行..."); pm.SetLimit(100); for (int i ...
- IIS - 自动申请、部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议)
IIS - 自动申请.部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议) 2017-12-19发布:hangge阅读:161 一.HTTPS 协议介绍 1,什么是 HTTP ...
- pytest.11.生成xml格式的测试报告
From: http://www.testclass.net/pytest/report/ pytest有非常友好的命令行报告输出,在做用例开发的时候,这是极好的.然而我们在运行用例后经常会需要将测试 ...