RecyclerView根据滑动改变状态栏

 //滑动监听事件        mRv.addOnScrollListener(new RecyclerView.OnScrollListener() {            //dy:每一次竖直滑动增量 向下为正 向上为负            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                final float density = mContext.getResources().getDisplayMetrics().density;                //滑动的距离                mDistanceY += dy;                //toolbar的高度                int toolbarHeight = (int) (214f * density) - mSearchLinear.getHeight();                //当滑动的距离 <= toolbar高度的时候,改变Toolbar背景色的透明度,达到渐变的效果                if (mDistanceY <= toolbarHeight) {                    mSearchKefu.setImageResource(R.mipmap.icon_kf_white);                    mSearchSaoyisao.setImageResource(R.mipmap.icon_sys_white);//                    searchLocationIma.setBackgroundResource(R.mipmap.icon_location_white);                    if (isIma) {                        searchLocationImaBlack.setVisibility(View.GONE);                        searchLocationIma.setVisibility(View.VISIBLE);                    } else {                        searchLocationText.setTextColor(Color.WHITE);                        searchLocationText.setCompoundDrawables(null, null, drawable2, null);                    }                    mSearchEdit.setTextColor(Color.WHITE);//                    mSearchLinearEdit.setBackgroundResource(R.drawable.bg_search);                    setStateBarTextColor(false);                    barState = "白";                    float scale = (float) mDistanceY / toolbarHeight;                    float alpha = scale * 255;                    mSearchLinear.setBackgroundColor(Color.argb((int) alpha, 255, 255, 255));                } else if (mDistanceY >= toolbarHeight) {                    mSearchLinear.setBackgroundResource(R.color.white);//                    searchLocationIma.setBackgroundResource(R.mipmap.icon_location);                    if (isIma) {                        searchLocationImaBlack.setVisibility(View.VISIBLE);                        searchLocationIma.setVisibility(View.GONE);                    } else {                        searchLocationText.setTextColor(Color.BLACK);                        searchLocationText.setCompoundDrawables(null, null, drawable1, null);                    }                    mSearchKefu.setImageResource(R.mipmap.icon_kf_black);                    mSearchSaoyisao.setImageResource(R.mipmap.icon_sys_black);                    mSearchEdit.setTextColor(Color.parseColor("#3B4664"));//                    mSearchLinearEdit.setBackgroundResource(R.drawable.bg_search_hide);                    setStateBarTextColor(true);                    barState = "黑";                } else {                    //上述虽然判断了滑动距离与toolbar高度相等的情况,但是实际测试时发现,标题栏的背景色                    //很少能达到完全不透明的情况,所以这里又判断了滑动距离大于toolbar高度的情况,                    //将标题栏的颜色设置为完全不透明状态//                    setStateBarTextColor(true);//                    barState = "黑";//                    mSearchLinear.setBackgroundResource(R.color.white);//'//                    searchLocationIma.setBackgroundResource(R.mipmap.icon_location);//                    mSearchKefu.setImageResource(R.mipmap.icon_kf_black);//                    mSearchSaoyisao.setImageResource(R.mipmap.icon_sys_black);//                    mSearchEdit.setTextColor(Color.GRAY);//                    searchLocationText.setTextColor(Color.GRAY);                }            }        });

根据ScrollView滑动改变

    //设置滑动        scrollView.setOnScrollistener(new MyScrollView.OnScrollistener() {            @Override            public void onScroll(int startY, int endY) {                changeAphla(startY, endY);            }        });   /**     * 根据内容窗体的移动改变标题栏背景透明度     *     * @param startY scrollview开始滑动的y坐标(相对值)     * @param endY   scrollview结束滑动的y坐标(相对值)     */    private void changeAphla(int startY, int endY) {        //获取标题高度        int titleHeight = titleFrame.getMeasuredHeight();        //获取背景高度        int backHeight = doctorHomeTxBg.getMeasuredHeight();        //获取控件的绝对位置坐标        int[] location = new int[2];        doctorHomeTxBg.getLocationInWindow(location);        //从屏幕顶部到控件顶部的坐标位置Y        int currentY = location[1];        //表示回到原位(滑动到顶部)        if (currentY >= 0) {            titleFrame.getBackground().mutate().setAlpha(0);        }        //颜色透明度改变        if (currentY < titleHeight && currentY >= -(backHeight - titleHeight)) {            //计算出滚动过程中改变的透明值            double y = Math.abs(currentY) * 1.0;            double height = (backHeight - titleHeight) * 1.0;            int changeValue = (int) (y / height * 255);            //判断是向上还是向下            if (endY > startY) {    //向上;透明度值增加,实际透明度减小                titleFrame.getBackground().mutate().setAlpha(changeValue);            } else if (endY < startY) {     //向下;透明度值减小,实际透明度增加                titleFrame.getBackground().mutate().setAlpha(changeValue);            }        }        //背景移除屏幕        if (currentY < -(backHeight - titleHeight)) {            titleFrame.getBackground().mutate().setAlpha(255);            titleLeftBack.setImageResource(R.mipmap.jt_left);            titleRight.setImageResource(R.mipmap.icon_more);            title.setTextColor(Color.BLACK);            setStateBarTextColor(true);        } else {            titleLeftBack.setImageResource(R.mipmap.icon_back_left_white);            titleRight.setImageResource(R.mipmap.icon_more_white);            title.setTextColor(Color.WHITE);            setStateBarTextColor(false);        }    }

自定义ScrollView

public class MyScrollView extends NestedScrollView {    private OnScrollistener onScrollistener;    public OnScrollistener getOnScrollistener() {        return onScrollistener;    }    public void setOnScrollistener(OnScrollistener onScrollistener) {        this.onScrollistener = onScrollistener;    }    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public MyScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyScrollView(Context context) {        super(context);    }    public interface OnScrollistener {        void onScroll(int startY, int endY);    }    @Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        onScrollistener.onScroll(oldt, t);        super.onScrollChanged(l, t, oldl, oldt);    }}

改变状态栏字体颜色

  /**     * 修改状态栏字体颜色     *     * @param dark     */    private void setStateBarTextColor(boolean dark) {        View decor = getWindow().getDecorView();        if (dark) {            //黑            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);        } else {            //白            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);        }    }

 

更多相关文章

  1. Android设置Button各种状态下背景改变
  2. android scrollview组件禁止滑动的方法
  3. Android(安卓)Design Support Library学习
  4. 解决Error:Android(安卓)Dex: com.android.dex.DexIndexOverflow
  5. ListView滑动变黑的处理
  6. 2011.06.08——— android 1.6 launcher研究之launcher的左右滑
  7. Android嵌套滑动
  8. Android中的ViewDragHelper
  9. Android(安卓)将软键盘的回车按钮改变成搜索按钮

随机推荐

  1. 谈实现Android定时执行
  2. Android高手应该精通哪些内容?
  3. Android列表分页功能的实现,往下拉时刷新
  4. Android学习之sqlit
  5. Android优酷播放器SDK——Eclipse工程迁
  6. windows系统上安装与使用Android NDK r5
  7. Android使用Toast显示消息提示框
  8. Android应用开发学习笔记之播放音频
  9. android 退出应用程序
  10. Android实用问题汇总