swiping - Android ScrollView dentro de ViewPager: cómo hacer que el deslizamiento sea más eficiente
android viewpager cancel swipe (0)
Estoy desarrollando una aplicación donde tengo ViewPager, dentro de la cual tengo ScrollView que contiene TextView. Todo está funcionando, pero cuando intento desplazar ViewPager, debo "dibujar" una línea absolutamente horizontal para deslizar una página. De lo contrario, si la línea dibujada no es perfectamente horizontal, cambiará ScrollView en su lugar.
Aquí está la imagen donde trato de explicar cuál es mi problema. La línea roja representa el deslizamiento del usuario.
Como puede ver, el último no deslizará ViewPager, sino ScrollView. Y hay un problema Cuando sostiene el teléfono en una mano, está usando el pulgar para deslizar y eso significa que no está dibujando una línea perfectamente horizontal, sino una línea que es similar a la línea que se muestra en el último Nexus. Entonces mi pregunta es: ¿cómo hacer que este deslizamiento sea más eficiente para mejorar la experiencia del usuario?
Aquí hay algo de mi código que estoy usando:
fragment.xml
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/divider"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp" >
</android.support.v4.view.ViewPager>
CustomPagerAdapter.java
ScrollView scroll;
TextView text;
@Override
public Object instantiateItem(ViewGroup container, int position) {
//Adding scrollview
scroll = new ScrollView(context);
//Creating TextView
text = new TextView(context);
text.setText(stringArray[position]);
text.setTextAppearance(context, android.R.style.TextAppearance_Medium);
//Adding TextView to ScrollView
scroll.addView(text, 0);
//Adding ScrollView to ViewPager
((ViewPager) container).addView(scroll, 0);
return scroll;
}
Fragment.java
CustomPagerAdapter adapter;
ViewPager pager;
...
///Set adapter
adapter = new CustomPagerAdapter(getActivity().getApplicationContext(), stringArray);
}
pager.setAdapter(adapter);
//Set onPagerChanger event
pager.setOnPageChangeListener(new OnPageChangeListener(){
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
pager.getParent().requestDisallowInterceptTouchEvent(true);
}
@Override
public void onPageSelected(int position) {
titleUpdater(position);
activePosition = position;
}
});