设置recycleView得滑动监听来实现头布局得颜色透明度状态改变

一般会在我们得  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);
        }
    }

猜你喜欢

转载自blog.csdn.net/mintent/article/details/88577374
今日推荐