¿Puedo tener onScrollListener para un ScrollView?

Estoy usando un HorizontalScrollView en un diseño y necesito identificar al usuario que ha llegado al punto inicial y final del rollo.

Para ListView he probado un onScrollListener y es posible encontrar el punto inicial y final de desplazamiento.

Intenté hacer lo mismo en mi Scrollview pero parece que no es posible. ¿Hay otras maneras posibles de lograr lo que necesito.

Gracias por adelantado.

Cada instancia de View llama a getViewTreeObserver() . Ahora, al mantener una instancia de ViewTreeObserver , puede agregar un OnScrollChangedListener() a ella mediante el método addOnScrollChangedListener() .

Puede ver más información sobre esta clase aquí .

Le permite estar al tanto de cada evento de desplazamiento, pero sin las coordenadas. Usted puede conseguirlos usando getScrollY() o getScrollX() de dentro del oyente sin embargo.

 scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() { @Override public void onScrollChanged() { int scrollY = rootScrollView.getScrollY(); // For ScrollView int scrollX = rootScrollView.getScrollX(); // For HorizontalScrollView // DO SOMETHING WITH THE SCROLL COORDINATES } }); 

Esto podría ser muy útil. Utilice NestedScrollView en lugar de ScrollView. La Biblioteca de soporte 23.1 introdujo un OnScrollChangeListener en NestedScrollView. Así que puedes hacer algo como esto.

  myScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { Log.d("ScrollView","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY); //Do something } }); 

Aquí está un HorizontalScrollView derivado que escribí para manejar las notificaciones sobre desplazamiento y desplazamiento final. Se maneja correctamente cuando un usuario ha dejado de activar el desplazamiento y cuando se desacelera completamente después de que un usuario permite ir:

 public class ObservableHorizontalScrollView extends HorizontalScrollView { public interface OnScrollListener { public void onScrollChanged(ObservableHorizontalScrollView scrollView, int x, int y, int oldX, int oldY); public void onEndScroll(ObservableHorizontalScrollView scrollView); } private boolean mIsScrolling; private boolean mIsTouching; private Runnable mScrollingRunnable; private OnScrollListener mOnScrollListener; public ObservableHorizontalScrollView(Context context) { this(context, null, 0); } public ObservableHorizontalScrollView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ObservableHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent ev) { int action = ev.getAction(); if (action == MotionEvent.ACTION_MOVE) { mIsTouching = true; mIsScrolling = true; } else if (action == MotionEvent.ACTION_UP) { if (mIsTouching && !mIsScrolling) { if (mOnScrollListener != null) { mOnScrollListener.onEndScroll(this); } } mIsTouching = false; } return super.onTouchEvent(ev); } @Override protected void onScrollChanged(int x, int y, int oldX, int oldY) { super.onScrollChanged(x, y, oldX, oldY); if (Math.abs(oldX - x) > 0) { if (mScrollingRunnable != null) { removeCallbacks(mScrollingRunnable); } mScrollingRunnable = new Runnable() { public void run() { if (mIsScrolling && !mIsTouching) { if (mOnScrollListener != null) { mOnScrollListener.onEndScroll(ObservableHorizontalScrollView.this); } } mIsScrolling = false; mScrollingRunnable = null; } }; postDelayed(mScrollingRunnable, 200); } if (mOnScrollListener != null) { mOnScrollListener.onScrollChanged(this, x, y, oldX, oldY); } } public OnScrollListener getOnScrollListener() { return mOnScrollListener; } public void setOnScrollListener(OnScrollListener mOnEndScrollListener) { this.mOnScrollListener = mOnEndScrollListener; } } 
  • Centro de contenido en vista de desplazamiento
  • No estirar ScrollView
  • Scrollview dentro de un fragmento de viewpager no se desplaza cuando se muestra el teclado
  • Android: ¿Cómo puedo hacer elementos desplazables horizontalmente en una lista vertical?
  • Agregar vistas de forma programática en un diseño (lineal) (que está dentro de un ScrollView)
  • Cómo cambiar el color de la actual desplazamiento en ScrollView Android?
  • EditText, adjustPan, ScrollView problema en android
  • Vista demasiado grande para encajar en la caché de dibujo en Webview dentro de scrollview
  • Barra de botones inferior de Android y vista de desplazamiento con tema de diálogo
  • Android View.OnKeyListener: haga clic una vez, ejecute dos veces
  • Android: ¿Vista de lista horizontal en la vista de desplazamiento vertical?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.