美文网首页
Android标题滑动透明

Android标题滑动透明

作者: XINHAO_HAN | 来源:发表于2017-11-02 10:16 被阅读0次

    看了QQ标题滑动透明感觉还挺,霸气的,就想着自己搞一个出来,做出来的感觉还行,自己也封装了一次,

    思路:根据上下滑动的距离来实现透明度,然后根据公式计算合适的值0~255之间( 滑动距离 / 你想要的高度 = 透明度)

    部分思路参考互联网一个作者的.0.0忘记名字了...
    显示效果如下:


    2017-11-02-10mzjhfgh.gif

    重写ScrollView里的方法,使他暴露出来,我这里是用的接口回调

       @Override
        protected void onScrollChanged(int x, int y, int oldx, int oldy) {
            super.onScrollChanged(x, y, oldx, oldy);
            if (scrollViewListener != null) {
                scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
            }
        }
    

    实现方法里的代码

     @Override
        public void onScrollChanged(GradationScrollView scrollView, int x, int y, int oldx, int oldy) {
            // TODO Auto-generated method stub
            if (y <= 0) {   //设置标题的背景颜色
                back_text.setBackgroundColor(Color.argb((int) 0, 37, 73, 157));//给什么控件设置
            } else if (y > 0 && y <= imageHeight) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
                float scale = (float) y / imageHeight;
                float alpha = (255 * scale);
                back_text.setTextColor(Color.argb((int) alpha, 255, 255, 255));//给什么控件设置
                back_text.setBackgroundColor(Color.argb((int) alpha, 37, 73, 157));//给什么控件设置
            } else {    //滑动到banner下面设置普通颜色
                back_text.setBackgroundColor(Color.argb((int) 255, 37, 73, 157));//给什么控件设置
    
            }
        }
    // 255 255 255
    //  RGB颜色
    

    你一看我擦,255,255,255的,还要麻烦美工???????不用,早知道你会说这个滴,来下边还有,我把Color给你转换好啦,开心不,老铁?

                    //红十六进制ff0000 color是你要转换的颜色
                    final int red = (color & 0xff0000) >> 16;
                    //绿十六进制00ff00
                    final int green = (color & 0x00ff00) >> 8;
                    //蓝十六进制0000ff
                    final int blue = (color & 0x0000ff);
                     
                    //比如我填一个"00FF00"
    
                    //向右移动8/16位,得到int类型,然后赋值
    

    具体应用

     @Override
        public void onScrollChanged(GradationScrollView scrollView, int x, final int y, int oldx, int oldy) {
    
            UIUtils.runOnThread(new Runnable() {
                @Override
                public void run() {
                    final int red = (color & 0xff0000) >> 16;
                    final int green = (color & 0x00ff00) >> 8;
                    final int blue = (color & 0x0000ff);
                    UIUtils.runOnUIThread(new Runnable() {
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            if (y <= 0) {   //设置标题的背景颜色
                                view_text_back.setBackgroundColor(Color.argb((int) 0, red, green, blue));
                                fen_aaa.setBackgroundColor(Color.argb((int) 0, red, green, blue));
                            } else if (y > 0 && y <= imageHeight) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
                                float scale = (float) y / imageHeight;
                                float alpha = (255 * scale);
                                view_text_back.setTextColor(Color.argb((int) alpha, 255, 255, 255));
                                view_text_back.setBackgroundColor(Color.argb((int) alpha, red, green, blue));
                                fen_aaa.setBackgroundColor(Color.argb((int) alpha, red, green, blue));
                            } else {    //滑动到banner下面设置普通颜色
                                view_text_back.setBackgroundColor(Color.argb((int) 255, red, green, blue));
                                fen_aaa.setBackgroundColor(Color.argb((int) 255, red, green, blue));
    
                            }
                        }
                    });
    
                }
            });
    
        }
    

    ------------------------------------------------------------------------------------------------------------------START
    开始咯,开始步骤了

    步骤1(重写ScrollView),我这个带有监听的,这是我的ScrollView 类

    /**
     * XINHAO_HAN
     *
     */
    public class GradationScrollView extends ScrollView {
    
    
    
        public interface ScrollViewListener {
    
            void onScrollChanged(GradationScrollView scrollView, int x, int y,
                                 int oldx, int oldy);
    
        }
    
        private ScrollViewListener scrollViewListener = null;
    
        public GradationScrollView(Context context) {
            super(context);
        }
    
        public GradationScrollView(Context context, AttributeSet attrs,
                                   int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public GradationScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public void setScrollViewListener(ScrollViewListener scrollViewListener) {
            this.scrollViewListener = scrollViewListener;
        }
    
        @Override
        protected void onScrollChanged(int x, int y, int oldx, int oldy) {
            super.onScrollChanged(x, y, oldx, oldy);
            if (scrollViewListener != null) {
                scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
            }
        }
    
    }
    
    
    

    步骤2,在布局当中添加GradationScrollView,并且fingViewById
    步骤3

    //设置监听
      scrollView.setScrollViewListener(this);
    

    如果是ListView

    listView.setOnScrollChangeListener(l);
    

    希望能给你一些启发0.0

    相关文章

      网友评论

          本文标题:Android标题滑动透明

          本文链接:https://www.haomeiwen.com/subject/ajfopxtx.html