HorizontalScrollView con flechas

Estoy intentando hacer un menú horizontal desplazable usando HorizontalScrollView usando la disposición demostrada abajo. El menú se puede desplazar con los botones de flecha anteriores / siguientes o en el fling. Cuando el HorizontalScrollView llegar a un extremo Me gustaría que la flecha en el mismo extremo que se oculta (en la imagen que se muestra a continuación, me gustaría que la flecha izquierda se oculte).

¿Cómo puedo detectar que el HorizontalScrollView ha llegado al final?

Gracias

Introduzca aquí la descripción de la imagen

<RelativeLayout android:background="@drawable/bg_home_menu" android:layout_width="fill_parent" android:layout_height="45dp"> <ImageView android:id="@+id/previous" android:src="@drawable/arrow_l" android:layout_height="14dp" android:layout_width="10dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <ImageView android:id="@+id/next" android:src="@drawable/arrow_r" android:layout_height="14dp" android:layout_width="10dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> <HorizontalScrollView android:id="@+id/horizontalScroll" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" android:fadingEdgeLength="30dp" android:layout_toLeftOf="@id/next" android:layout_toRightOf="@id/previous" > <LinearLayout android:id="@+id/home_menu" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center_vertical"> <Button android:id="@+id/btn_home" android:background="@drawable/btn_home_menu_on" android:layout_height="35dp" android:layout_width="wrap_content" android:focusable="true" android_clickable="false" android:text="@string/menu_home" android:textColor="#FFFFFF" android:tag="-1"/> <!-- More are added dynamically --> </LinearLayout> </HorizontalScrollView> </RelativeLayout> 

Use getScrollX () del LinearLayout dentro de su desplazador para determinar cuál es la esquina más a la izquierda en la pantalla. Si es 0, entonces la flecha izquierda debe estar deshabilitada.

Para la flecha de la derecha, recuperar el ancho del rectángulo de dibujo , agregar getScrollX () y compararlo con getMeasuredWidth () , si es igual, estás a la derecha, no es necesario para la flecha derecha.

Así su código se verá así:

 if (homeMenu.getScrollX()==0) { hideLeftArrow(); } else { showLeftArrow(); } if (homeMenu.getDrawingRect().right == homeMenu.getMeasuredWidth()) { hideRightArrow(); } else { showRightArrow(); } 

Por supuesto tendrás que poner esto en un oyente del acontecimiento. Sólo puedo pensar en usar su propia clase HorizontalScrollView, con el método onScroll () sobrescrito para realizar las comprobaciones anteriores, ver esta publicación .

No hay escucha de desplazamiento para HorizontalScrollView. Lo que puedes hacer es añadir un OnTouchListener a él. Esto disparará continuamente cuando el usuario se desplace, y cada vez que puedas usar el método getScrollX que devuelve el int.

Ahora 0 significa que su izquierda más, para encontrar el derecho más (cantidad de desplazamiento máximo), necesita encontrar el ancho de la vista secundaria de la vista de desplazamiento horzontal. Que se encuentra utilizando el addOnGlobalLayoutListener de lo contrario el ancho siempre será 0 dentro del método onCreate

Ponga este código en el método onCreate

 final HorizontalScrollView hs = (HorizontalScrollView)findViewById(R.id.scroll); ViewTreeObserver vto = hs.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { hs.getViewTreeObserver().removeGlobalOnLayoutListener(this); maxScrollX = hs.getChildAt(0) .getMeasuredWidth()-getWindowManager().getDefaultDisplay().getWidth(); } }); hs.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.e("ScrollValue", Integer.toString(hs.getScrollX())); if(hs.getScrollX() == maxScrollX){ Log.e("MaxRight", "MaxRight"); } return false; } }); 
  • Android - deshabilitar el desplazamiento excesivo en HorizontalScrollView
  • TabWidget envuelto en HorizontalScrollView no se desplaza con ViewPager
  • Android: HorizontalScrollView smoothScroll tiempo de animación
  • HorizontalListview con imagen seleccionar y unselect
  • ¿Cómo implementaron las noticias Android BBC y las aplicaciones Pulse news la vista de desplazamiento horizontal?
  • Insertar una vista dinámicamente en un HorizontalScrollView en Android
  • Androide HorizontalScrollView dirección del componente de diseño
  • "IllegalStateException: scrollview puede alojar sólo un hijo directo" en un LinearLayout añadiendo
  • ¿Cómo desplazarse al centro de HorizontalScrollView sólo cuando se inicia la actividad?
  • Obtener la ubicación secundaria en HorizontalScrollView y desplácese hasta ella
  • Resalte la imagen seleccionada en HorizantalListView en android y permanecerá seleccionada hasta que no se haga clic en otra imagen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.