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

本文介绍如何在Android中使用RecyclerView的滑动监听,实现在滑动时改变头布局的颜色透明度状态。主要操作步骤包括在onCreate中初始化,自定义滑动逻辑,并在界面中实现监听以更新UI。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值