2013-04-20 53 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);

現在你可以得到視圖的位置