检测viewpager中的触摸/点击事件

我对android开发相当陌生,目前我正在使用viewpager,试图了解如何处理触摸/点按事件。 我花了整整一个上午寻找答案,我似乎无法find任何帮助我的东西。

基本上我有一个viewpager与5个片段,都使用相同的布局。 我想要做的就是能够检测静止视图上的点击/触摸(当拖动视图时,我不希望发生任何检测)。

从我收集的信息来看,ViewPager默认会拦截所有的触摸事件。 我相信这可以通过使用:

myPager.requestDisallowInterceptTouchEvent(true); 

起初,我涉足OnTouchListener,并试图loggingonTouch方法是否曾经被击中 – 它似乎没有。 我也看到了GestureDetector类作为这个问题的一个解决scheme,但坦率地说,我感到不知所措,我不知道我应该在这里使用哪些类/接口。

我只想在使用ViewPager时select简单的触摸/点击事件。

目前,我正在使用Android开发人员网站的animation教程代码的修改版本。 这是我在我的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; } } } 

这就是我的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; } } 

仅供参考我已经检查了这些资源,因为它们经常被认为是我所面临的问题的最佳解决scheme(从我所能收集的内容中):

android:ViewPager和Horizo​​ntalScrollVIew

在网格布局上进行手势检测

但是我一直没能从他们那里得到很多的帮助。 就像我说的,我对android的工作很陌生,所以我真的很想熟悉这些基础知识!

谢谢

编辑:只是为了澄清,我想拿起每个片段内的触摸事件,因为一旦我通过这个障碍,我想一些片段触摸事件工作,而其他人将只显示无响应的内容。

Solutions Collecting From Web of "检测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; }