Cómo alinear el centro de la pestaña activa en Android Disposición de la pestaña deslizante

Tengo 12 artículos en el androide que resbala el diseño de la lengüeta + paginador de la visión. Mientras se desliza de izquierda a derecha, la pestaña seleccionada debe estar centrada en el centro de reproducción. Por favor, ayúdame a hacer eso. En mi aplicación, la pestaña activa siempre queda a la izquierda de la pantalla.

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

3 Solutions collect form web for “Cómo alinear el centro de la pestaña activa en Android Disposición de la pestaña deslizante”

Mi enfoque difiere un poco de la solución Shripad Bhat , que rebotan la pestaña al final de la diapositiva.

Aquí está mi solución …

Cambios en el método onPageScrolled :

 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int tabStripChildCount = mTabStrip.getChildCount(); if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { return; } mTabStrip.onViewPagerPageChanged(position, positionOffset); View selectedTitle = mTabStrip.getChildAt(position); int selectedOffset = (selectedTitle == null) ? 0 : selectedTitle.getWidth(); int nextTitlePosition = position + 1; View nextTitle = mTabStrip.getChildAt(nextTitlePosition); int nextOffset = (nextTitle == null) ? 0 : nextTitle.getWidth(); int extraOffset = (int)(0.5F * (positionOffset * (float)(selectedOffset + nextOffset))); scrollToTab(position, extraOffset); if (mViewPagerPageChangeListener != null) { mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels); } } 

Cambios en el método scrollToTab :

 private int mLastScrollTo; private void scrollToTab(int tabIndex, int positionOffset) { final int tabStripChildCount = mTabStrip.getChildCount(); if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { return; } View selectedChild = mTabStrip.getChildAt(tabIndex); if (selectedChild != null && selectedChild.getMeasuredWidth() != 0) { int targetScrollX = ((positionOffset + selectedChild.getLeft()) - getWidth() / 2) + selectedChild.getWidth() / 2; if (targetScrollX != mLastScrollTo) { scrollTo(targetScrollX, 0); mLastScrollTo = targetScrollX; } } } 

Google ha proporcionado una muestra para el diseño de pestañas deslizantes . Sin embargo, en la implementación de la clase SlidingTabLayout, no se diseñó para alinear en centro la pestaña seleccionada. Tengo que modificar el método de desplazamiento para hacer que el centro de la pestaña seleccionada / activa de la pantalla. Aquí está el cambio de código:

Nombre de clase: SlidingTabLayout

Número de línea: 241, scrollToTab {}

Método actualizado:

 private void scrollToTab(int tabIndex, int positionOffset) { final int tabStripChildCount = mTabStrip.getChildCount(); if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { return; } View selectedChild = mTabStrip.getChildAt(tabIndex); if (selectedChild != null) { int targetScrollX = selectedChild.getLeft() + positionOffset; if (tabIndex > 0 || positionOffset > 0) { // If we're not at the first child and are mid-scroll, make sure we obey the offset targetScrollX -= (getWidth()-selectedChild.getWidth())/2; } scrollTo(targetScrollX, 0); } } 

Tenía este problema también. TabLayout proporciona sólo la opción tabContentStart, necesaria en ambos lados:

 public class CenteringTabLayout extends TabLayout { public CenteringTabLayout(Context context) { super(context); } public CenteringTabLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CenteringTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); View firstTab = ((ViewGroup)getChildAt(0)).getChildAt(0); View lastTab = ((ViewGroup)getChildAt(0)).getChildAt(((ViewGroup)getChildAt(0)).getChildCount()-1); ViewCompat.setPaddingRelative(getChildAt(0), (getWidth()/2) - (firstTab.getWidth()/2),0,(getWidth()/2) - (lastTab.getWidth()/2),0); } } 
  • Android ViewPager al pasar la última pantalla
  • El título de ViewPager no aparece hasta que lo deslice
  • Fragmentos anidados pierden llamadas a onCreateOptionsMenu después de rotación de pantalla
  • Cuando se utiliza ViewPager con Fragmentos, los fragmentos se destruyen al deslizar
  • Gestión del ciclo de vida de Android de Fragmentos dentro de ViewPager y FragmentPagerAdapter
  • Android Viewpager tinder como UI con la apariencia de la pila de tarjetas 3D
  • Flip imágenes en un viewpager
  • Adaptador sin fin para ViewPager
  • La imagen no se muestra en ImageViewZoom
  • Cambio de la cuenta de ViewPager
  • TabLayout con viewpager no desplazamiento suave
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.