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的滑动效果却无法生效了,原因是因 ...
随机推荐
- taro 组件的外部样式和全局样式
自定义组件对应的样式文件,只对该组件内的节点生效. 编写组件样式时,需要注意以下几点: 组件和引用组件的页面不能使用 id 选择器(#a).属性选择器([a])和标签名选择器,请改用 class 选择 ...
- node api 之:fs
fs.readFile() 函数会缓存整个文件. 为了最小化内存占用,尽可能优先使用 fs.createReadStream().
- 反射中setAccessible()方法
调用私有变量域的时候要用setAccessible https://blog.csdn.net/kjfcpua/article/details/8496911
- ELK-head
Head从elastic5开始只是支持单独服务器,不能够在通过 elasticsearch/bin/plugin -install mobz/elasticsearch-head 这样简单的方式安装插 ...
- Hibernate更新删除数据后,再查询数据依然存在的解决办法
删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...
- 找出n个数中重复最多的10个数
题目很清晰,直接上python代码 import pandas as pd import copy class BenchMark: def __init__(self): self.MIN = 10 ...
- FFMPEG-Java 入门
注意:FFMPEG-Java 和 Jffmpeg 不是一回事.FFMPEG-Java 是 Freedom for Media in Java(缩写为 FMJ)的一个子项目. 这个项目遵循 ...
- 2017.11.13 flex 布局相关问题
一.今日任务:城市体验平台小程序的开发(由于数据还未完善,今天主要是 UI 布局的开发) 二.所遇问题 1. flex 布局问题: html: <view class="flex-sp ...
- Delphi常用API,API函数
auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出 ...
- Styles in Windows Phone
1. Use resources in internal style file: <Application.Resources> <ResourceDictionary Source ...