¿Cómo configurar las imágenes para ScrollView en lugar de degradar los bordes?
Estoy utilizando Horizontal Scroll View, dinámicamente voy a añadir elementos en que. si no. De los elementos son más que mostrar elementos en la pantalla que quiero mostrar la imagen (flecha) en los bordes (como la vista de desplazamiento muestra los bordes de desvanecimiento). Cómo puedo hacerlo.
Sólo mira debajo de la imagen, quiero crear así.
- Android: Dibujo sobre lienzo en Scrollview
- El teclado suave de Android oculta el botón
- Desplazamiento con varios ListViews para Android
- Android: Notificar a Scrollview que el tamaño de su hijo ha cambiado: ¿cómo?
- Android ScrollView scrollTo () método no funciona con TextView?
Este es el código xml
<HorizontalScrollView android:layout_width="wrap_content" android:scrollbars="none" android:id="@+id/app_category" android:layout_below="@+id/top_layout" android:background="@drawable/minitopbar" android:layout_height="30dp"> <LinearLayout android:orientation="horizontal" android:id="@+id/app_category_scroll_layout" android:layout_width="wrap_content" android:layout_height="fill_parent"/> </HorizontalScrollView>
- DialogFragment sin título - ScrollView no se desplaza
- ScrollView Inside ScrollView
- Android ScrollView no funciona correctamente
- ¿Cómo tener un pie de página fijo con scrollview en android?
- Android ScrollView ¿cómo mantener el componente en la pantalla cuando se desplaza a la parte superior de la pantalla?
- Android - varias vistas de desplazamiento verticales en scrollview horizontal
- ScrollView setOverScrollMode reemplazo en API <9
- Barra de desplazamiento en android
A. Usted tiene que crear su propia clase, que se extiende HorizontalScrollView
:
public class ExtendedHorizontalScrollView extends HorizontalScrollView { private IScrollStateListener scrollStateListener; public HorizontalScrollViewForMenu(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public HorizontalScrollViewForMenu(Context context, AttributeSet attrs) { super(context, attrs); } public HorizontalScrollViewForMenu(Context context) { super(context); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); prepare(); } private void prepare() { if (scrollStateListener != null) { View content = this.getChildAt(0); if (content.getLeft() >= 0) scrollStateListener.onScrollMostLeft(); if (content.getLeft() < 0) scrollStateListener.onScrollFromMostLeft(); if (content.getRight() <= getWidth()) scrollStateListener.onScrollMostRight(); if (content.getLeft() > getWidth()) scrollStateListener.onScrollFromMostRight(); } } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (scrollStateListener != null) { if (l == 0) scrollStateListener.onScrollMostLeft(); else if (oldl == 0) scrollStateListener.onScrollFromMostLeft(); int mostRightL = this.getChildAt(0).getWidth() - getWidth(); if (l >= mostRightL) scrollStateListener.onScrollMostRight(); if (oldl >= mostRightL && l < mostRightL) scrollStateListener.onScrollFromMostRight(); } } public void setScrollStateListener(IScrollStateListener listener) { scrollStateListener = listener; } public interface IScrollStateListener { void onScrollMostLeft(); void onScrollFromMostLeft(); void onScrollMostRight(); void onScrollFromMostRight(); } }
B. Utilícelo definiendo del diseño:
<LinearLayout .....> <ImageView android:id="@+id/navigation_left" ..... /> <your.custom.view.package.ExtendedHorizontalScrollView android:id="@+id/scroller" android:layout_width="0px" android:layout_weight="1" android:fadingEdge="none" ....> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" /> </your.custom.view.package.ExtendedHorizontalScrollView> <ImageView android:id="@+id/navigation_right" ..... /> </LinearLayout>
C. Añada lógica para desactivar las flechas cuando no pueda desplazarse más.
((ExtendedHorizontalScrollView)findViewById(R.id.scroller)).setScrollStateListener(new IScrollStateListener() { public void onScrollMostRight() { ((View) scroller.getParent()).findViewById(R.id.navigation_right).setVisibility(View.INVISIBLE); } public void onScrollMostLeft() { ((View) scroller.getParent()).findViewById(R.id.navigation_left).setVisibility(View.INVISIBLE); } public void onScrollFromMostLeft() { ((View) scroller.getParent()).findViewById(R.id.navigation_left).setVisibility(View.VISIBLE); } public void onScrollFromMostRight() { ((View) scroller.getParent()).findViewById(R.id.navigation_right).setVisibility(View.VISIBLE); } });
Una alternativa fácil es hacer una vista de desplazamiento sin desvanecimiento de los bordes y luego agregar la imagen con la flecha debajo o encima de la vista de desplazamiento.
Su xml algo similar:
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:fadingEdge="none" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <View android:layout_height="6dp" android:layout_width="fill_parent" android:layout_alignParentBottom="true" android:background="@drawable/background_effect"/> </RelativeLayout> </FrameLayout>
- Uso de mi propia biblioteca compartida precompuesta en un proyecto de Android NDK
- Fragmento dentro de la pestaña en Android