当前位置: 首页 > 科技观察

AndroidScroller简单使用示例

时间:2023-03-13 22:50:08 科技观察

Android中的Scroller类是View平滑滚动的Helper类。通常用在自定义View中,在View中定义一个私有成员mScroller=newScroller(context)。当设置mScroller的滚动位置时,不会引起View的滚动。通常,mScroller用于记录/计算View的滚动位置,然后重写View的computeScroll()完成真正的滚动。相关API介绍如下mScroller.getCurrX()//获取mScroller当前水平滚动位置mScroller.getCurrY()//获取mScroller当前垂直滚动位置mScroller.getFinalX()//获取mScroller最终水平位置stopsmScroller.getFinalY()//获取mScroller的最终垂直位置mScroller.setFinalX(intnewX)//设置mScroller的最终水平位置,无动画效果,直接跳转到目标位置mScroller.setFinalY(intnewY)//设置mScroller最终停止位置垂直位置,无动画效果,直接跳转到目标位置//scroll,startX,startY为开始滚动的位置,dx,dy为滚动的偏移量,duration为完成滚动的时间mScroller.startScroll(intstartX,intstartY,intdx,intdy)//使用默认完成时间250msmScroller.startScroll(intstartX,intstartY,intdx,intdy,intduration)mScroller.computeScrollOffset()//返回值为boolean,true表示滚动还没有完成,false表示滚动完成。这是一个很重要的方法,一般放在View.computeScroll()中,判断滚动是否结束。比如自定义一个CustomView,使用Scroller滚动:privatestaticfinalStringTAG="Scroller";privateScrollermScroller;publicCustomView(Contextcontext,AttributeSetattrs){super(context,attrs);mScroller=newScroller(context);}//调用该方法滚动到目标位置publicvoidsmoothScrollTo(intfx,intfy){intdx=fx-mScroller.getFinalX();intdy=fy-mScroller.getFinalY();smoothScrollBy(dx,dy);}//调用该方法设置滚动的相对偏移量publicvoidsmoothScrollBy(intdx,intdy){//设置mScrollerShift的滚动偏移量mScroller.startScroll(mScroller.getFinalX(),mScroller.getFinalY(),dx,dy);invalidate();//这里必须调用invalidate()来保证computeScroll()会被调用,否则界面可能没有刷新,看不到scro填充效果}@OverridepublicvoidcomputeScroll(){//先判断mScroller是否滚动完成if(mScroller.computeScrollOffset()){//这里调用View的scrollTo()完成真正的滚动scrollTo(mScroller.getCurrX(),mScroller.getCurrY());//该方法必须调用,否则可能看不到滚动效果postInvalidate();}super.computeScroll();}}