Android标题滑动透明

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

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

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


5337239-89f6e62a7712aea6.gif
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值