Detección de eventos de toque / toque en un viewpager
Soy bastante nuevo en el desarrollo de Android y actualmente estoy trabajando con un viewpager, tratando de entender cómo puedo manejar eventos de toque / toque. He pasado toda la mañana buscando respuestas a esto y no puedo encontrar nada que me ayude.
Básicamente tengo un viewpager con 5 fragmentos que todos utilizan la misma disposición. Todo lo que quiero hacer es poder detectar cuando hay un toque / toque en la vista estacionaria (no quiero que ocurra ninguna detección cuando se está arrastrando una vista).
- ¿Es posible tener un ViewPager dentro de un ScrollView?
- ActionBarSherlock + Tabbed Fragments + ViewPager insider un fragmento
- ViewPager no vuelve a dibujar contenido, permanece / se vuelve en blanco
- Actualizar imágenes en FragmentStatePagerAdapter al reanudar la actividad
- ¿Cómo obtener el fragmento actual que se muestra en una pestaña específica de un viewpager?
De lo que deducimos, parece que hay un problema con ViewPager interceptar todos los eventos por defecto. Creo que esto puede tratarse usando:
myPager.requestDisallowInterceptTouchEvent(true);
Al principio me topé con OnTouchListener y traté de registrar si el método onTouch fue alcanzado – no apareció. También he visto la clase GestureDetector lanzada sobre mucho como una solución a este problema, pero francamente me siento abrumado y no estoy seguro de qué clases / interfaces debo utilizar aquí.
Todo lo que me gustaría hacer es recoger toques simples / tap eventos mientras se utiliza un ViewPager.
Por el momento estoy usando una versión modificada del código tutorial de Animación del sitio de desarrolladores de android. Esto es lo que tengo en mi archivo MainActivity.java :
package com.example.pbinteractive; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; public class MainActivity extends FragmentActivity { /** * The number of pages (wizard steps) to show in this demo. */ private static final int NUM_PAGES = 5; /** * The pager widget, which handles animation and allows swiping horizontally to access previous * and next wizard steps. */ private ViewPager mPager; /** * The pager adapter, which provides the pages to the view pager widget. */ private PagerAdapter mPagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Instantiate a ViewPager and a PagerAdapter. mPager = (ViewPager) findViewById(R.id.pager); mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); mPager.setAdapter(mPagerAdapter); } /** * A simple pager adapter that represents 5 {@link ScreenSlidePageFragment} objects, in * sequence. */ private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return MyPageFragment.create(position); } @Override public int getCount() { return NUM_PAGES; } } }
Y esto es lo que tengo en mi archivo MyPageFragment.java :
package com.example.pbinteractive; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; public class MyPageFragment extends Fragment implements OnTouchListener { /** * The argument key for the page number this fragment represents. */ public static final String ARG_PAGE = "page"; /** * The fragment's page number, which is set to the argument value for {@link #ARG_PAGE}. */ private int mPageNumber; /** * Factory method for this fragment class. Constructs a new fragment for the given page number. */ public static MyPageFragment create(int pageNumber) { MyPageFragment fragment = new MyPageFragment(); Bundle args = new Bundle(); args.putInt(ARG_PAGE, pageNumber); fragment.setArguments(args); return fragment; } public MyPageFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPageNumber = getArguments().getInt(ARG_PAGE); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout containing a title and body text. ViewGroup rootView = (ViewGroup) inflater .inflate(R.layout.fragment_slide, container, false); // Set the title view to show the page number. //((TextView) rootView.findViewById(android.R.id.text1)).setText( // getString(R.string.title_template_step, mPageNumber + 1)); return rootView; } /** * Returns the page number represented by this fragment object. */ public int getPageNumber() { return mPageNumber; } @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return false; } }
FYI He comprobado ambos recursos, ya que a menudo parecen ser citados como la mejor solución al problema que estoy enfrentando (por lo que puedo reunir):
Android: ViewPager y HorizontalScrollVIew
Detección de gestos fling en el diseño de la cuadrícula
Pero no he podido obtener mucha ayuda de ellos. Como dije que soy bastante nuevo para trabajar con Android, así que realmente me gustaría familiarizarme con lo básico!
Gracias
EDIT: Sólo para aclarar, me gustaría recoger los eventos de toque dentro de cada fragmento , ya que una vez que superar este obstáculo me gustaría que algunos fragmentos para que los eventos de toque de trabajo, mientras que otros sólo mostrará el contenido sin respuesta.
- CoordinatorLayout dentro de otro CoordinatorLayout
- Cómo deshabilitar el desplazamiento de HorizontalScrollView dentro de ViewPager
- ViewPager PagerAdapter no actualizar la vista
- ¿Por qué se llama a onCreateView, onCreate, onActivityCreated del fragmento
- PagerTitleStrip no muestra títulos en la primera página de visualización, los títulos sólo se dibujan después de pasar a otra página
- Nesting Android ViewPager, Swiping ListItems dentro de un ListView horizontalmente
- Fragmentos de Viewpager no se muestran después de la primera vez
- ¿Cómo puedo hacer que mi botón haga algo en Fragments, ViewPager
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout containing a title and body text. ViewGroup rootView = (ViewGroup) inflater .inflate(R.layout.fragment_slide, container, false); LinearLayout layout = (LinearLayout)rootView.findViewById(R.id.layout)// get your root layout layout.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.v(null, "TOUCH EVENT"); // handle your fragment number here return false; } }); return rootView; }
- Get onPause & onResume como eventos en el nivel de aplicación / tarea
- GetRight, getLeft, getTop devuelve cero