Я пытаюсь установить начальную позицию прокрутки View, но не нашел способ. У кого-нибудь есть идеи? Также у меня есть фрагмент GoogleMaps как дочерний элемент прокрутки.
Спасибо,
Райан
Я пытаюсь установить начальную позицию прокрутки View, но не нашел способ. У кого-нибудь есть идеи? Также у меня есть фрагмент GoogleMaps как дочерний элемент прокрутки.
Спасибо,
Райан
Да, это возможно:
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 пикселей.
Вы также можете попробовать задержать процесс прокрутки:
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
Принятый ответ не работает для меня. Прямого способа установки начального положения прокрутки нет.
Однако вы можете установить начальную позицию перед рисованием прокрутки, например:
rootView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
scrollView.getViewTreeObserver().removeOnPreDrawListener(this);
scrollView.setScrollY(100);
return false;
}
});
Вы также можете использовать scrollView.setScrollY(100)
внутри Handler
, но при прокрутке это будет отрываться.
Scrollview sw = (ScrollView) findViewById(R.id.scrollView);
sw.post(new Runnable() {
public void run() {
sw.smoothScrollTo(0, 5000);
}
});
Ни один из ответов не работал у меня. Мой ScrollView
является частью окружения LinearLayout
. Я поместил настройку ScrollView
в метод onDraw()
этого LinearLayout
следующим образом:
@Override
protected void onDraw(Canvas canvas){
if(scrollAdjustTries > 2){
return;
}
scrollAdjustTries++;
mScrollView.scrollTo(0, mModel.scrollLine());
}
Очень уродливый, но работающий.