Использование метода smoothScrollBy в классе Android ScrollView - PullRequest
5 голосов
/ 18 марта 2012

У меня есть программа Android с ScrollView, которая будет правильно выполнять автоматическую прокрутку при вызове метода scrollBy на эмуляторе на моем компьютере, но не будет делать это на моем телефоне Android.

Вот код:

public class RecordGameActivity3 extends Activity {
ScrollView myView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recordgame3);
    myView = (ScrollView)findViewById(R.id.scrollView1);

}

public void addPlayer(View v)
{
    //Removed non-related code

    myView.smoothScrollBy(0, 50);
}
}

Кроме того, обычный метод scrollBy не работает или метод scrollTo (хотя я могу просто не использовать его правильно, поскольку он также не работает на компьютере). У кого-нибудь есть идеи, что может быть не так?

EDIT:

Моя проблема, как показал ответ Даррелла, заключалась в том, что я вызывал свой метод smoothScrollBy из функции, в которой я вносил изменения в макет, которые делали область прокрутки достаточно большой, чтобы ее можно было прокручивать. Очевидно, к тому времени, когда я вызывал ее в функции, изменения фактически не применялись, и поэтому их нельзя было прокручивать.

Таким образом, я изменил код, используя его совет:

public class RecordGameActivity3 extends Activity {
ScrollView myView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recordgame3);
myView = (ScrollView)findViewById(R.id.scrollView1);

// New code that listens for a change in the scrollView and then calls the scrollBy method.
ViewTreeObserver vto = myView.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        myView.smoothScrollBy(0, 100);
    }});

}

public void addPlayer(View v)
{
    //Code that is called on an onClick listener that adds things to the ScrollView making it scrollable.
}
}

Ответы [ 2 ]

8 голосов
/ 18 марта 2012

Вы вызываете smoothScrollBy из метода onCreate? Попробуйте подождать, пока не будут настроены представления, например, из onResume. (Если вам нужно сделать это с помощью onCreate, вы можете зарегистрировать ViewTreeObserver для своего представления с помощью OnGlobalLayoutListener и выполнить прокрутку оттуда.)

2 голосов
/ 18 апреля 2014

В моем случае мне нужно прокрутить ScrollView, когда в точном ScrollView возникает событие MotionEvent.ACTION_UP, scrollTo () работает, а smoothScrollTo () - нет.Спасибо вам, ребята, я понял это сейчас, используйте обработчик для плавной прокрутки, через некоторое время будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...