当前位置:   article > 正文

Android之ScrollView滚动到指定位置_android scrollview滚动到指定位置

android scrollview滚动到指定位置

一、ScrollView滚动到顶部或者底部:

  1. ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view);
  2. scrollView.post(new Runnable(){
  3. @Override
  4. public void run(){
  5. //滚动到底部
  6. scrollview.fullScroll(ScrollView.FOCUS_DOWN);
  7. //滚动到顶部
  8. //scrollview.fullScroll(ScrollView.FOCUS_UP);
  9. }
  10. });

二、ScrollView滚动到指定位置:

  1. LinearLayout llNeedToSkip = (LinearLayout) findViewById(R.id.ll_need_to_skip);
  2. ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view);
  3. scrollView.post(new Runnable(){
  4. @Override
  5. public void run(){
  6. //滚动到指定位置(滚动要跳过的控件的高度的距离)
  7. scrollView.scrollTo(0, llNeedToSkip.getMeasuredHeight());
  8. //如果要平滑滚动,可以这样写
  9. //scrollView.smoothScrollTo(0, llNeedToSkip.getMeasuredHeight());
  10. }
  11. });

    因为ScrollView是一个“重量级”控件,类似于ListView、RecyclerView等,scrollXX()等方法是基于消息队列来同步的,所以在onCreate()方法中调用未必会马上就执行,可能在队列中等待处理,因此需要用post()方法。

    我遇到的现实情况是ScrollView中嵌套了多个RecyclerView,页面比较复杂,即使采用post()方法也不能达到效果,这时候我能想到的办法就是延时:

  1. LinearLayout llNeedToSkip = (LinearLayout) findViewById(R.id.ll_need_to_skip);
  2. ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view);
  3. scrollView.postDelay(new Runnable(){
  4. @Override
  5. public void run(){
  6. scrollView.smoothScrollTo(0, llNeedToSkip.getMeasuredHeight());
  7. }
  8. }, 1000);

    如果还是不行的话,就增加延时时间看看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/312693
推荐阅读
相关标签
  

闽ICP备14008679号