web-dev-qa-db-ja.com

ScrollViewの開始位置を設定するにはどうすればよいですか?

スクロールビューの初期位置を設定しようとしましたが、方法が見つかりませんでした。誰かアイデアはありますか?また、スクロールビューの子としてGoogleMapsフラグメントがあります。

おかげで、

ライアン

15
RyanCW

はい、それは可能です:

ScrollView.scrollTo(int x, int y);
ScrollView.smoothScrollTo(int x, int y);
ScrollView.smoothScrollBy(int x, int y);

そのために使用できます。 xパラメータとyパラメータは、水平軸と垂直軸でスクロールする座標です。

コードの例:

    @Override   
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);

        ScrollView sv = (ScrollView) findViewById(R.id.scrollView);
        sv.scrollTo(0, 100);
     }

その例では、Activityが開始されると、ScrollViewが100ピクセル下にスクロールされます。

delayスクロールプロセスを試すこともできます。

final ScrollView sv = (ScrollView) findViewById(R.id.scrollView);

Handler h = new Handler();

h.postDelayed(new Runnable() {

    @Override
    public void run() {
        sv.scrollTo(0, 100);            
    }
}, 250); // 250 ms delay
21
Philipp Jahoda

受け入れられた答えは私のために働いていません。スクロールビューの初期位置を直接設定する方法はありません。

ただし、次のように、スクロールビューを描画する前に初期位置を設定できます。

_rootView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
        scrollView.setScrollY(100);
        return false;
    }
});
_

Handler内でscrollView.setScrollY(100)を使用することもできますが、スクロールするとぎくしゃくします。

5
Vijay

数時間後、インターネット検索

私のためのこの作品:

ScrollView.post(new Runnable() {
@Override
public void run() {
//setting position here :
        ScrollView.scrollTo(X, Y);
    } 
});
1
Amir194

答えはどれもうまくいきませんでした。私のScrollViewは周囲のLinearLayoutの一部です。 ScrollViewの調整を、このLinearLayoutonDraw()メソッドに次のように入力します。

@Override
protected void onDraw(Canvas canvas){
    if(scrollAdjustTries > 2){
        return;
    }
    scrollAdjustTries++;
    mScrollView.scrollTo(0, mModel.scrollLine());
}

非常に醜いが、機能している。

0
Josef K.
Scrollview sw = (ScrollView) findViewById(R.id.scrollView);
sw.post(new Runnable() {
     public void run() {
           sw.smoothScrollTo(0, 5000);
     }
});
0
user7222571

問題は、ScrollViewがレイアウトされる前にそのサイズを知らないことです。解決策は、スクロール位置を保存することですunil onLayoutが呼び出されてから、スクロール位置を設定します。

次に例を示します(kotlin)。

class MyScrollView constructor(context: Context, attrs: AttributeSet) : ScrollView(context, attrs) {

    private var hasStartPositionBeenSet = false
    var startPosition = 0

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
        super.onLayout(changed, l, t, r, b)

        if(!hasStartPositionBeenSet) {
             scrollTo(0, startPosition)
             hasStartPositionBeenSet = true
        }
    }
}

class MyActivity: Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        /* ... */
        findViewById<MyScrollView>(R.id.scrollView).startPosition = scrollPosition
    }
}
0
Selti99