2013-04-20 49 views
0

我使用viewpager来向用户展示一些介绍,有两个屏幕,当两个屏幕都完成时我必须通过intent。目前,我已实施viewpager并通过了intentViewpager当用户从右到左滑动时调用intent

这是我迄今所做的:

编辑我的源代码:

IntroActivity.java

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 
    final ImagePagerAdapter adapter = new ImagePagerAdapter(); 
    viewPager.setAdapter(adapter); 

    OnPageChangeListener mListener = new OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      // TODO Auto-generated method stub 
      selectedIndex = arg0; 
      System.out.println("Selecte Page: " + selectedIndex); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 
      if (mPageEnd && arg0 == selectedIndex) { 
       Log.d(getClass().getName(), "Okay"); 
       mPageEnd = false;// To avoid multiple calls. 
      } else { 
       mPageEnd = false; 
      } 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 
      if (selectedIndex == adapter.getCount() - 1) { 
       mPageEnd = true; 
      } 
     } 
    }; 
    viewPager.setOnPageChangeListener(mListener); 

} 

private class ImagePagerAdapter extends PagerAdapter { 
    private int[] mImages = new int[] { R.drawable.libin1, 
      R.drawable.libin2 }; 

    @Override 
    public int getCount() { 
     return mImages.length; 

    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((ImageView) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Context context = MainActivity.this; 
     ImageView imageView = new ImageView(context); 
     int padding = context.getResources().getDimensionPixelSize(
       R.dimen.padding_medium); 
     imageView.setPadding(padding, padding, padding, padding); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
     imageView.setImageResource(mImages[position]); 
     ((ViewPager) container).addView(imageView, 0); 
     return imageView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((ImageView) object); 
    } 
} 

通过这些,我能够实现viewpager,但你当用户在第二个屏幕上时,可以看到我打电话给onTouchListener

我的问题是,如果用户因为touchListener()而想再次看到第一个屏幕,只要用户触摸屏幕,就会调用该意图。

我一直在使用GestureListenerfling行动试过了,但也没有我的帮助。

我该如何克服这个问题?

任何形式的帮助将不胜感激。所有我建议的

回答

4

首先你重新考虑你的逻辑。去另一个Activity并且能够滑动到上一页的行为似乎有点矛盾,当他到达最后一页时向用户呈现一个通知(邀请他“关闭”这个介绍),我认为这是一个更好的选择。

反正你可以做你想做的。在ViewPager设置一个OnPageChangeListener监听相互作用:

 @Override 
     public void onPageScrollStateChanged(int state) { 
      mCurrentState = state; 
      // if we are at the second page and the user touched the 
      // ViewPager post a Runnable with a decent time to schedule our 
      // Intent 
      if (mViewPager.getCurrentItem() == 1) { 
       if (state == ViewPager.SCROLL_STATE_DRAGGING) { 
        mHandler.postDelayed(mRun, INTERVAL); 
       } 
      } 
     } 

你需要:

private ViewPager mViewPager; 
private int mCurrentState = -1; 
private static int INTERVAL = ViewConfiguration.getLongPressTimeout(); 
private Handler mHandler = new Handler(); 
private Runnable mRun = new Runnable() { 

    @Override 
    public void run() { 
     // we got the Runnable to be executed. If we are on the second page 
     // and the user let go of the ViewPager in our time frame then start 
     // the Activity(also cancel the dozen Runnables that were posted) 
     if (mCurrentState == ViewPager.SCROLL_STATE_IDLE 
       && mViewPager.getCurrentItem() == 1) { 
      mHandler.removeCallbacks(mRun);// or always set it to run 
      Intent i = new Intent(PagerTextTouch.this, MainActivity.class); 
      startActivity(i); 
     } 
    } 
}; 
+0

谢谢你为你的答案太多了。有效。你是魔术师。 – Anupam 2013-04-22 09:14:59

+0

你好是否有可能知道,如果用户试图刷卡viewpager在OnPageChange对监听方法 – Prateek 2013-08-27 06:57:06

+0

最后一页@prateek尽量刷卡的最后一页使衰落边缘出现?如果是,那么你可以通过'onPageScrollStateChanged()'和'onPageScrolled()'之间的组合来做到这一点。 – Luksprog 2013-08-27 07:39:56

0

您将

private static class PageListener extends SimpleOnPageChangeListener{ 
    public void onPageSelected(int position) { 
     Log.i(TAG, "page selected " + position); 
      currentPage = position; 
      } 


} 

呼叫获取视图页面现在的位置是在pageListner

pageListener = new PageListener(); ViewPager.setOnPageChangeListener(pageListener);

现在你可以得到视图的位置