实现ScrollView头标题滑动渐变

ScrollView滑动监听:

Google并没有给我们提供ScrollView的滑动距离、是否滑动到布局底部、顶部的方法,但是提供了一个onScrollChanged方法:

@Override
  protected void onScrollChanged(int x, int y, int oldx, int oldy) {
    super.onScrollChanged(x, y, oldx, oldy);
    //todo:
    }
  }

我们可以知道这个方法的参数分别为: 
l:当前横向滑动距离 
t:当前纵向滑动距离 
oldl:之前横向滑动距离 
oldt:之前纵向滑动距离

但是这个方法我们不可以调用,我们可以重写接口或者重写ScrollView暴露该方法:

/**
 * Created by 张乔君 on 2017/10/12.
 */
public class GradaScrollView extends ScrollView {

 private ScrollViewListener scrollViewListener = null;

 public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } public interface ScrollViewListener { void onScrollChanged(GradaScrollView scrollView, int x, int y, int oldx, int oldy); } public GradaScrollView(Context context) { super(context); } public GradaScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public GradaScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if(scrollViewListener!=null){ scrollViewListener.onScrollChanged(this, l, t, oldl, oldt); } }}

设置标题渐变

滚动监听暴露出来我们就该去设置标题栏随着ScrollView的滑动来改变标题栏的透明度实现渐变:

<com.zqj.jingdongdemo.view.GradaScrollView
    android:id="@+id/slv"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include layout="@layout/f1_head" android:id="@+id/f1_head"></include>          
    </RelativeLayout>
</com.zqj.jingdongdemo.view.GradaScrollView>



主activity里面的方法

private void setListener() {
 //获取顶部图片高度后,设置滚动监听
    ViewTreeObserver vto = banner.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){

        @Override
        public void onGlobalLayout() {

         changehead.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            height=banner.getHeight();//获取xbanner的高度
            scrollview.setScrollViewListener(new GradaScrollView.ScrollViewListener() {
                @Override
                public void onScrollChanged(GradaScrollView scrollView, int x, int y, int oldx, int oldy) {
                    if(y<=0){//初始值
                        changehead.setBackgroundColor(Color.argb((int) 0, 144,151,166));
                    }else if(y>0 && y<=height){//开始渐变
                        float scale = (float) y / height;
                        float alpha = (255 * scale);
                       changehead.setBackgroundColor(Color.argb((int) alpha, 144,151,166));
                    }else{//超过banner的高度后,转换颜色
                        changehead.setBackgroundColor(Color.argb((int) 255, 144,151,166));
                    }
                }
            });

        }
    });

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值