如何以编程方式滚动Horizo​​ntalScrollView

Ben*_*fez 21 android horizontal-scrolling horizontalscrollview

我有一个HorizontalScrollView包含一个RelativeLayout.此布局在XML中为空,并在onCreate中从java填充.

我希望这个滚动视图最初位于中间的某个位置RelativeLayout,这比屏幕大.

我试过mHorizScrollView.scrollTo(offsetX, 0);哪个不起作用.我不知道这有什么问题.

我可以发布代码,但它并不真正相关.重要的是一切都是以编程方式完成的(必须:s),并且HorizontalScrollView必须以编程方式设置初始位置.

谢谢阅读.请告诉我您是否需要更多详细信息,或者这是否不够清楚.

Hal*_*alR 26

我发现,如果你extendHorizontalScrollView和覆盖onLayout,你可以清晰地滚动,超级调用后onLayout:

MyScrollView extends HorizontalScrollView {
    protected void onLayout (boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        this.scrollTo(wherever, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑: 要滚动到开始结束,您可以使用:

this.fullScroll(HorizontalScrollView.FOCUS_RIGHT/FOCUS_LEFT);
Run Code Online (Sandbox Code Playgroud)

代替

this.scrollTo(wherever, 0);
Run Code Online (Sandbox Code Playgroud)


小智 24

public void autoSmoothScroll() {

        final HorizontalScrollView hsv = (HorizontalScrollView) view.findViewById(R.id.horiscroll);
        hsv.postDelayed(new Runnable() {
            @Override
            public void run() {
                //hsv.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
                hsv.smoothScrollBy(500, 0);
            }
        },100);
    }
Run Code Online (Sandbox Code Playgroud)


Ted*_*opp 16

要测试它是否是计时问题(我认为是这样),而不是在onStart中调用scrollTo(),而是使用调用scrollTo的Runnable调用postDelayed(),延迟为30左右.


Vik*_*rla 9

更好的方法是使用ViewTreeObserver观察布局.

View interestedInView;
onCreate(){
  //Code

  //Observe for a layout change
  ViewTreeObserver viewTreeObserver = interestedInView.getViewTreeObserver();
  if (viewTreeObserver.isAlive()) {
    viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
        //REMOVE THE VIEWTREE OBSERVER
        //interestedInView is ready for size and position queries because it has been laid out
      }
    });
  }
}
Run Code Online (Sandbox Code Playgroud)