escuchando eventos de desplazamiento horizontalscrollview android

Estoy tratando de escuchar el evento cuando se desplaza HorizontalScrollView . Intenté esto pero no imprime nada.

 HorizontalScrollView headerScrollView = new HorizontalScrollView(this); headerScrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub Log.i("hv1",event.toString()); Log.i("hv1","HELLO"); return false; } }); 

El problema real es que quiero desplazar dos HorizontalScrollView a la vez …; ambos necesitan desplazarse simultáneamente cuando al menos uno de ellos se desplazó. cualquier solución?

Utilicé la respuesta a continuación y luego intenté implementar esto, pero no estoy seguro de cómo debo usar los métodos en la clase.

 TestHorizontalScrollView headerScrollView = (TestHorizontalScrollView) findViewById(R.id.headerHv); 

¿Es esta la manera en que necesito apuntar al elemento hsv en el archivo de diseño?

Puede intentar crear su propia clase personalizada que extienda HorizontalScrollView y sobreescriba la función onScrollChanged () como tal

 public class TestHorizontalScrollView extends HorizontalScrollView { public TestHorizontalScrollView(Context context) { super(context); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { // TODO Auto-generated method stub Log.i("Scrolling", "X from ["+oldl+"] to ["+l+"]"); super.onScrollChanged(l, t, oldl, oldt); } } 

Esta función anulada captará todos los cambios en la posición de desplazamiento incluso cuando la vista no se toque. Esto debería mantener sus vistas de desplazamiento sincronizadas.

vieja pregunta, pero tal vez útil. Puedes hacer algo como esto:

 scrollOne = (HorizontalScrollView)findViewById(R.id.horizontal_one); scrollTwo = (HorizontalScrollView)findViewById(R.id.horizontal_two); scrollTwo.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View view, MotionEvent event) { // TODO Auto-generated method stub int scrollX = view.getScrollX(); int scrollY = view.getScrollY(); scrollOne.scrollTo(scrollX, scrollY); return false; } }); 

ScrollView with Listener, api <23

escribe debajo en tu código

 MyHorizontalScrollView scrollView = (MyHorizontalScrollView)view.findViewById(R.id.scrollViewBrowse); scrollView.setOnScrollChangedListener(new MyHorizontalScrollView.OnScrollChangedListener() { @Override public void onScrollChanged(int l, int t, int oldl, int oldt) { } }); 

MyHorizontalScrollView

  public class MyHorizontalScrollView extends ScrollView { public OnScrollChangedListener mOnScrollChangedListener; public MyHorizontalScrollView(Context context) { super(context); } public MyHorizontalScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mOnScrollChangedListener != null) { mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt); } } public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener){ this.mOnScrollChangedListener = onScrollChangedListener; } public interface OnScrollChangedListener{ void onScrollChanged(int l, int t, int oldl, int oldt); } } 

* Archivo Xml *

   

puedes probar esto, lo he intentado de muchas maneras, pero ninguno de ellos satisface mis necesidades, y luego traté de hacerlo yo mismo, y tengo éxito, y parece bueno, es suave.

          

 public class WrapContentListView extends ListView{ public WrapContentListView(Context context) { super(context); } public WrapContentListView(Context context, AttributeSet attrs) { super(context, attrs); } public WrapContentListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }