Android: как определить, прокручивается ли представление - PullRequest
3 голосов
/ 19 марта 2010

в iPhone это было бы просто --- у каждого представления есть метод scrollViewDidScroll. Я пытаюсь найти эквивалент в Android.

Мой код работает, но он не дает мне то, что я хочу. Мне нужно выполнить код всю продолжительность прокрутки представления. Итак, хотя я использую метод OnGestureListener onScroll, он срабатывает только тогда, когда палец находится на экране (он не совсем правильно назван - он должен называться «onSlide» или «onSwipe», фокусируясь на жесте, а не на анимации интерфейса пользователя) ). Он не продолжает срабатывать, если пользователь щелкает по экрану, и он все еще прокручивается в течение нескольких мгновений после того, как пользователь поднимает палец.

есть ли метод, который вызывается на каждом шаге прокрутки?

public class Scroll extends Activity implements OnGestureListener {

public  WebView         webview;

public  GestureDetector gestureScanner;

public  int         currentYPosition;
public  int         lastYPosition;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    webview = new WebView(this);
    setContentView(webview);
    webview.loadUrl("file:///android_asset/Scroll.html");

    gestureScanner = new GestureDetector(this);

    currentYPosition = 0;
    lastYPosition = 0;

}


public boolean onTouchEvent(final MotionEvent me) {
    return gestureScanner.onTouchEvent(me);
}


public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    // I do stuff here.
    return true;
}

Ответы [ 3 ]

4 голосов
/ 20 марта 2010

Я немного поигрался с WebView и не нашел способа отследить прокрутку, но вам определенно нужно, чтобы он был WebView? Если вы используете ListView или GridView, вы можете реализовать методы ListView.OnScrollListener, в частности onScrollStateChanged и onScroll. Первый особенно полезен, так как он дает вам обновленную информацию о том, что делает список, даже для вашего конкретного примера того, как пользователь «бросает» список, и после этого он продолжает прокручиваться некоторое время. Пример того, как вы бы это отследили:

public class List13 extends ListActivity implements ListView.OnScrollListener {

(...)

    public void onScrollStateChanged(AbsListView view, int scrollState) {
        switch (scrollState) {
        case OnScrollListener.SCROLL_STATE_IDLE:
            //List is idle
            break;
        case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
            //List is scrolling under the direct touch of the user
            break;
        case OnScrollListener.SCROLL_STATE_FLING:
            //The user did a 'fling' on the list and it's still scrolling
            break;
        }
    }
}

Я понял, что прямо из примеров кода, которые предоставляет Google, пример List13 в проекте Api Demos. Если вы хотите поближе взглянуть на это, импортируйте его в Eclipse, выбрав «Файл» -> «Создать» -> «Android Project», «Создать проект из существующего источника» и перейдите в (папка SDK) / platform / (версия, которую вы работа с) / samples / ApiDemos. Если вы не можете найти его, возможно, вы не загрузили примеры приложений при настройке SDK. Вы можете сделать это в Eclipse, перейдя в Window -> Android SDK и AVD Manager, затем в «Доступные пакеты» слева.

1 голос
/ 07 октября 2010

Попробуйте следующий метод

@Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
}

, он даст вам последнюю прокручиваемую позицию и новую прокручиваемую позицию после прокрутки.

1 голос
/ 20 марта 2010

Я думаю, что вы можете сделать это с помощью View, а не Activity. В представлении есть метод с именем onScrollChanged, который звучит так, как вы хотите. Если это не так, вы можете также изучить методы computeScroll, scrollBy и scrollTo того же класса.

...