22

HorizontalScrollView含む がありRelativeLayoutます。このレイアウトは XML では空であり、onCreate で Java から取り込まれます。

RelativeLayoutこのスクロール ビューを、最初は画面よりもかなり大きいの真ん中に配置したいと思います。

mHorizScrollView.scrollTo(offsetX, 0);私はどれがうまくいかないか試しました。これの何が問題なのかわかりません。

コードを投稿できますが、実際には関係ありません。重要なのは、すべてがプログラムで行われる (:s が必要) ことと、 の初期位置をHorizontalScrollViewプログラムで設定する必要があることです。

読んでくれてありがとう。詳細が必要な場合、またはこれが十分に明確でない場合はお知らせください。

4

9 に答える 9

28

をオーバーライドするとextend、次のスーパーコールの後で、きれいにスクロールできることがわかりました。HorizontalScrollViewonLayoutonLayout

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

編集: スクロールして開始または終了するには、次を使用できます。

this.fullScroll(HorizontalScrollView.FOCUS_RIGHT/FOCUS_LEFT);

それ以外の

this.scrollTo(wherever, 0);
于 2012-02-29T22:55:14.217 に答える
27
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);
    }
于 2013-06-20T21:13:20.020 に答える
16

onStartでscrollTo()を呼び出す代わりに、タイミングの問題であるかどうかをテストするには、scrollToを呼び出すRunnableを使用してpostDelayed()を30程度の遅延で呼び出します。

于 2011-01-26T01:33:34.600 に答える
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
      }
    });
  }
}
于 2011-08-15T03:48:38.733 に答える
1

問題は、ビューにまだサイズがないことです。これを行うためのクリーンな方法は、ScrollView の onSizeChanged を実装して、アクティビティの Handler にメッセージを送信し、ビューにサイズがあり、スクロールが可能であることをアクティビティに通知することです。

于 2011-05-10T20:37:44.220 に答える
1

view.post を使用し、run メソッド内に scrollTo(x,y) を記述します。これは、Android API ドキュメントに従って post メソッドでビューを無効にする方法です。

于 2011-05-25T04:31:32.587 に答える
0

onSizeChanged 関数が機能するはずです。ハンドラーは UI スレッドでコードを実行するため、onSizeChanged はコールバック関数ではなく、アクティビティのハンドラーにメッセージを送信する必要があることを理解できません。外部で UI 操作を行うことはできません。ハンドラーを見てください。

于 2011-05-13T06:06:03.177 に答える
0

scrollTo 関数が機能するはずです。HSV の layout_width とその中のビューは?

于 2011-01-25T23:28:17.860 に答える