一般会在我们得 oncreat 里面
//设置状态栏根据滑动 透明度变化
MyScrow scrow = new MyScrow(this);
scrow.onBindScrow(recyclerView);
然后是直接在我们得这个类MyScrow中进行一些滑动逻辑得操作。
package com.example.myapplication;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by pw on 2019/3/15 10:23
* E-Mail Address: pw163.com
*/
public class MyScrow implements ScrowIf {
private final OnScrowListener scrow;
public interface OnScrowListener{
void scrowListener(int alpha, int i, int i1, int i2);
}
public MyScrow(OnScrowListener scrowListener) {
this.scrow = scrowListener;
}
@Override
public void onBindScrow(final View sv) {
if (sv instanceof RecyclerView){
((RecyclerView) sv).addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager manager = (LinearLayoutManager)((RecyclerView) sv).getLayoutManager();
//获取当前可见条目得索引
int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();
//获取当前可见条目得itemView
View firstView = manager.findViewByPosition(firstVisibleItemPosition);
//获取当前可见条目得itemView得高度
int height = firstView.getHeight();
//获取当前可见条目得偏移量
int y = (firstVisibleItemPosition) * height - firstView.getTop();
int alpha = 255*y/(height);
if (alpha>255){
alpha = 255;
}
if (alpha <5){
alpha = 0;
}
if (null != scrow){
scrow.scrowListener(alpha,255,255,255);
}
}
});
}
}
}
然后是接口写了一个方法
package com.example.myapplication;
import android.view.View;
/**
* Created by pw on 2019/3/15 10:21
* E-Mail Address: pw163.com
*/
public interface ScrowIf {
void onBindScrow(View view);
}
然后是我们得界面实现了监听来进行我们界面ui得改变
/**
* 滑动监听
* @param alpha
* @param red
* @param green
* @param blue
*/
@Override
public void scrowListener(int alpha, int red, int green, int blue) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {//小于6.0对状态栏特殊处理
if (alpha >= 70) {
rl.setBackgroundColor(getResources().getColor(R.color.bg_trans));
} else {
rl.setBackgroundColor(Color.argb(alpha, red, green, blue));
}
} else {
rl.setBackgroundColor(Color.argb(alpha, red, green, blue));
}
rl.setBackgroundColor(Color.argb(alpha, 255, 255, 255));
if (alpha>=255){
left_bg.setVisibility(View.GONE);
}else {
left_bg.setVisibility(View.VISIBLE);
}
}