解决ScrollView ScrollTo方法无效的方法

  • 问题:

    很多时候我们在做自定义View的时候都会在ScrollView中添加子布局,然而常常发现运行的时候ScroView会自动滑动到最底端。比如我在自定义ScrollView中用代码添加了几个布局,运行的时候它会直接滑动到最底部。这不是我们想要的效果,我们不想让它进来时显示最底部的内容,或者说不想让它滑动最底部。

  • 思考:
    很多人会和我一样既然它会自动滑动到最底部,那我们再让它滑动到最顶部不就行了吗?事实上这样是不行的。因为我们是在初始化的时候调用scrollTo方法的,但是在初始化的时候整个ScrollView还没有layout结束,然后我们看看ScrollView的onLayout方法的最后一行:

 @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
         ...
        // Calling this with the present values causes it to re-claim them
        scrollTo(mScrollX, mScrollY);
    }

它会调用 scrollTo方法,在这里它滑动到了最底部,而且是在初始化之前调用的,也就是说在我们调用了scrollTo之后调用的,所以我们写的scrollTo方法自然也就看不到效果了。

  • 解决方法
    我们可以重写scrollTo方法,并且把super.scrollTo注释掉,这样就我们就禁用了scrollTo方法:
 @Override
    public void scrollTo(int x, int y) {
//        super.scrollTo(x, y);
        Log.i("CC", "scrollTo:X:" + x + ",Y:" + y);
    }

或者实现自定义的scrollTo方法,调用一下父类的scrollTo方法,比如:

 public void mScrollTo(int x, int y) {
        super.scrollTo(x, y);
    }
  • 总结

    如果自定义ScrollView出现直接滑动到底部的情况,可以重写scrollTo方法并且注释掉super.scrollTo方法。在需要使用srollTo的地方使用super.scrollTo。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值