Cómo obtener una indicación de que el usuario está intentando desplazarse más en un ViewPager
Quiero iniciar una nueva actividad una vez que un usuario intenta desplazarse cuando está en el último fragmento (cuando ocurre el efecto de rebote). Estoy usando ViewPagerIndicator
El código siguiente inicia la actividad una vez que el último fragmento es visible.
- Android CoordinatorLayout + AppbarLayout + Viewpager siempre desplazándose
- Hacer ViewPager rápido con la resistencia más corta
- FragmentStatePagerAdapter onPageSelected evento
- Guardar estado de fragmento en ViewPager
- ¿Por qué parpadean los iconos / textos de las lengüetas de TabLayout al pasar entre páginas?
¿Alguna idea?
CirclePageIndicator titleIndicator = (CirclePageIndicator)findViewById(R.id.titles); titleIndicator.setViewPager(pager); titleIndicator.(new ); titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { selectedIndex = position; } @Override public void onPageScrolled(int position, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int scroll) { if(selectedIndex == adapter.getCount()-1) { launchactivity)(; } } });
- ViewPager parece reenable clipChildren al desplazarse si se configura PageTransformer
- ActionBar ERROR: Navegación de modo de lista no visible después de usar SearchView
- ¿Cómo obtener el fragmento actual que se muestra en una pestaña específica de un viewpager?
- FragmentPagerAdapter Deslizar para mostrar ListView 1/3 Anchura de la pantalla
- ¿Cómo puedo configurar ViewPager layoutParams de forma programática?
- La animación en la pestaña Viewpager cambia fadein / fadeout como la pantalla de introducción de Linkedin
- Cómo usar Android ViewPager
- Cómo limitar los cambios de página de ViewPager a uno por gesto
mPager.getAdapter().getCount() - 1
Cuando el estado del desplazador es ViewPager.SCROLL_STATE_DRAGGING
significa que el dedo del usuario está todavía en la pantalla y arrastrando el mPager.getAdapter().getCount() - 1
ver. La condición siguiente necesita 0 positionOffset
consecutivo para decidir si está entrando en el modo overscroll.
titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { private int mScrollState = -1; private float mPreviousPageOffset; @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); mScrollState = state; if(mScrollState == ViewPager.SCROLL_STATE_IDLE) mPreviousPageOffset = -1; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { super.onPageScrolled(position, positionOffset, positionOffsetPixels); boolean isLastPosition = position == mPager.getAdapter().getCount() - 1; if(isLastPosition && mScrollState == ViewPager.SCROLL_STATE_DRAGGING && mPreviousPageOffset == 0f && positionOffset == 0f){ //launchActivity } mPreviousPageOffset = positionOffset; } });
Si el usuario libera el dedo, el positionOffset
seguirá siendo 0, pero el estado del scroller será ViewPager.SCROLL_STATE_SETTLING
o el que obtendremos 0 para positionOffset
sólo una vez.