简介今天我们来学习ScrollView——滚动视图,滚动视图分为水平滚动视图(Horizo??ntalScrollView)和垂直滚动视图(ScrollView),今天我们主要研究垂直的。相信大家在开发中经常会用到。ScrollView的功能已经很强大了,但是还是不能满足我们脑洞大开的UI设计者,所以我们需要自定义...本文主要讲的是监听ScrollView的滑动实现仿QQ渐变空间标题栏,一起来看看先上效果图:好了,我们切入主题。关于android:scrollbars设置滚动条显示的那些ScrollView属性你可能不知道。none(隐藏)、horizo??ntal(水平)、vertical(垂直)android:scrollbarStyle设置滚动条的样式和位置。设置值:insideOverlay,insideInset,outsideOverlay,outsideInsetandroid:scrollbarThumbHorizo??ntal设置水平滚动条的drawable。android:soundEffectsEnabled设置点击或触摸时是否有音效android:fadingEdge设置拉动滚动条时边框渐变的方向。none(边框颜色不变),horizo??ntal(水平方向颜色变浅),vertical(垂直方向颜色变浅)。参考fadingEdgeLength的渲染android:fadingEdgeLength设置边框渐变的长度android:scrollX设置水平滚动的偏移值,单位为像素,在GridView中可以看到android:scrollY设置垂直滚动的单位为像素的偏移值android:scrollbarAlwaysDrawHorizo??ntalTrack的设置是否一直显示垂直滚动条android:scrollbarDefaultDelayBeforeFade在N毫秒后开始淡出,单位毫秒。对以上属性感兴趣的可以研究一下,这里就不赘述了。许多属性并不常用。说说我们经常用到的吧。如何监听ScrollView的滚动,实现标题栏的渐变?ScrollView滑动监控:Google并没有给我们提供ScrollView的滚动距离,是滑动到布局底部还是顶部。,但是提供了一个onScrollChanged方法:@OverrideprotectedvoidonScrollChanged(intx,inty,intoldx,intoldy){super.onScrollChanged(x,y,oldx,oldy);//todo:}}通过查看源码注释,/***Thiscalcalledinresponsetoaninternalscrollinthisview(即*viewscrolleditsowncontents)。这通常是*{@link#scrollBy(int,int)}或{@link#scrollTo(int,int)}被*调用的结果。**@paramlCurrenthorizo??ntalscrollorigin。*@paramtCurrentverticalscrollorigin。*@paramoldlPrevioushorigintalscrollorigin.*@paramoldlPrevioushorizo??ntalscrollorigin.*@paramoldtPreviousverticalscrollorigin.*/我们可以知道这个方法的参数是:l:当前水平滚动距离t:当前垂直滚动距离oldl:上一个水平滚动距离oldt:上一个垂直滚动距离但是我们不能调用这个方法,我们可以重复写一个接口或者重写ScrollView暴露这个方法:packagecom.hankkin.gradationscroll;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.widget.ScrollView;voidonScrollChanged(GradationScrollViewscrollView,intx,inty,intoldx,intoldy);}privateScrollViewListenerscrollViewListener=null;publicGradationScrollView(Contextcontext){super(context);}publicGradationScrollView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,deftextStyle);}contextGradationScrollView(context,属性,deftextStyle);AttributeSetattrs){super(context,attrs);}publicvoidsetScrollViewListener(ScrollViewListenerscrollViewListener){this.scrollViewListener=scrollViewListener;}@OverrideprotectedvoidonScrollChanged(intx,inty,intoldx,intoldy){super.onScrollChanged(x,y,oldx,oldy);scrollViewListener!=null){scrollViewListener.onScrollChanged(this,x,y,oldx,oldy);}}}设置标题渐变滚动监听外露,我们应该设置标题栏随着ScrollView滑动改变标题栏的透明度实现Gradient:我们先看看布局:
