关于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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值