Обнаружение прокрутки scrollView - PullRequest
5 голосов
/ 22 июня 2010

Я пытаюсь определить, когда ScrollView завершил прокрутку, чтобы я мог немного изменить его положение. Раньше я использовал ACTION_UP для определения, когда пользователь поднял палец, но потом я понял, что это не позволит мне использовать «бросание», так как это изменит прокрутку до ее завершения.

Есть ли способ определить, когда ScrollView завершил прокрутку? Или определить его состояние прокрутки как ListView?

Есть еще идеи, как это реализовать?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010

Я реализовал решение на основе комментария Журбак.

С уважением

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ScrollView;

public class MyScrollView extends ScrollView {

    private static final int WHAT = 1;

    class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(!hasMessages(WHAT)) {
                Log.i("TestScroll", "Last msg!. Position from " 
                                    + msg.arg1 + " to " + msg.arg2);                
            }
        }
    }

    private Handler mHandler = new MyHandler();

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        final Message msg = Message.obtain();
        msg.arg1 = oldt;
        msg.arg2 = t;
        msg.what = WHAT;
        mHandler.sendMessageDelayed(msg, 500);
    }

}
1 голос
/ 22 июня 2010

Я бы подошел к этому, создав дочерний класс ScrollView, скажем, MyScrollView, и использовал бы его вместо ScrollView.

Таким образом, вы можете переопределить методы ScrollView, которые вызываются при прокрутке; и добавить в них обратный вызов someform (не забывая вызвать соответствующий метод в super)

Я не могу сказать вам, какой из методов ScrollView будет вызываться когда; Я предполагаю, что один из них вызывается каждый раз, когда происходит проклятие, но какой ... может быть просто scrollTo().

Полагаю, было бы очень интересным и познавательным опытом переопределить их всех и просто войти в систему, когда они вызваны. Я мог бы захотеть сделать это сам, если я это сделаю, я обязательно вернусь с более полезным ответом, если предположить, что никто другой не сделает за это время.

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