私は現在、このUI構造を持っています:
Activity (ACT)
LinearLayout (LL)
HorizontalScrollView (HSV)
RelativeLayout (RL)
RL のレイアウト パラメータを設定すると、手遅れになるまで適用されません。
var TotalWidth = GetNewWidth() // eg returns 1000...
var lp = this.LayoutRoot.LayoutParameters;
lp.Width = TotalWidth;
this.LayoutRoot.LayoutParameters = lp;
// this.LayoutRoot.LayoutParameters.Width == 1000
// this.LayoutRoot.Width == 0
this.LayoutRoot.RequestLayout();
this.LayoutRoot.ForceLayout();
this.RequestLayout();
this.ForceLayout();
// this.LayoutRoot.LayoutParameters.Width == 1000
// this.LayoutRoot.Width == 0
幅を使用していなかった場合、これは問題ではありませんが、私は :) 私はこれをしたいです:
this.ScrollTo(500, 0);
HSV の子の合計幅が現在 0 であるため、これは効果がありません。
しかし、私がこれを行うと:
this.PostDelayed(() => this.ScrollTo((int) percent, 0), 500);
500ミリ秒の遅延後に機能します。
HSV は、そのコンテンツ自体を管理する派生クラスです。幅を設定するために使用する空の RL であり、画像を描画するための巨大な領域を確保できます。大規模なスクロール キャンバスのようなものです。また、私がやろうとしているのは、HSV の OnSizeChanged オーバーライドされたメンバーです。コントロールのサイズを変更すると、コントロールが同じ位置にスクロールされるようにしたい。幅は高さに依存します (アスペクト比を維持します)