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?
- Cambiar el tamaño de ImageViews de manera eficiente en HorizontalScrollView
- Efecto marquesina para diseño lineal
- ¿Cómo puede alguien crear una lista de desplazamiento horizontal con efecto de ajuste al centro
- ScrollTo, scrollBy, smoothScrollTo, smoothScrollTo no funcionan en ScrollView después de agregar la vista en el diseño secundario
- ViewPagerIndicator - Establece TabPageIndicator en el centro
Gracias
<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>
- Galería de imágenes con una Scrollview horizontal
- Android UI - Android vista de desplazamiento horizontal
- Sincronizar la posición de dos vistas ScrollView
- Centrar elementos de HorizontalScrollView cuando no sea suficiente para hacer que se desplace
- Android: moviendo la imagen de fondo mientras navega por las vistas
- Cómo detectar que el HorizontalScrollView ha llegado al final
- Lazy carga en HorizontalScrollView para evitar el problema de memoria insuficiente
- Sincronizar dos vistas de desplazamiento horizontal android
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; } });
- Modificar los bits de acceso del remolque sector Mifare Classic
- Rellene la forma con texto con dos colores diferentes