欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于OverScroller.startScroll函数失效的解决办法

程序员文章站 2022-05-05 10:25:31
...

问题场景:

利用OverScroller实现点击“上滑按钮”将一个View从窗口底部滑动到顶部,上滑失败。涉及的函数为:OverScroller.startScroll。

跟踪问题:

利用OverScroller实现View滑动的机制:

//第一步:开启滑动计算器,通知View刷新
void onClickUpMoveButton(){
    mScroller.startScroll(startX, startY, dx, dy, duration) ;
    mView.invalidate();
}
//第二步:View刷新会反复调用View.computeScroll(),重写此函数,实现View缓慢移动的效果
@Override
public void computeScroll() {
    super.computeScroll();
    if(mScroller.computeScrollOffset()){
        scrollTo(0,mScroller.getCurrY());
    }
}

但实际测试中发现,点击“上滑按钮”View没有上滑,通过插点打Log发现View.computeScroll()没有被执行过,然后查阅资料发现只有view被附加在当前窗口上,View.computeScroll()才会被执行。

解决方案:

方案一:初始化view的时候,保证1dp漏出屏幕,可以解决问题,但出现了一个1dp的白线,不美观。
方案二:执行mScroller滑动前,先滑动到窗口可见位置:

void onClickUpMoveButton(){
    mView.setTranslationY(-1);
    mScroller.startScroll(startX, startY, dx, dy, duration) ;
    mView.invalidate();
    mView.setTranslationY(0);
}