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

问题场景:

利用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);
}

你可能感兴趣的:(Android,基础,Android,Android,API解析,代码异常修复)