2012-09-17 22 views
2

我希望我的ViewPager實現在視圖之間循環,而不是在最後一個視圖處停止。例如,如果我有3個視圖要通過ViewPager顯示,它應該在第三個視圖之後返回到第一個視圖,而不是在第三個視圖中停止。我希望它在用戶向前甩在最後一頁上ViewPager循環?

非常感謝返回到第一頁/視圖,

Mypageradapter;

package com.example.pictures; 

import android.content.Context; 
import android.media.AudioManager; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 


public class MyPagerAdapter extends PagerAdapter{ 

public int getCount() { 
    return 6; 
} 

public Object instantiateItem(View collection, int position) { 

    View view=null; 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.picture1; 
     view = inflater.inflate(resId, null);   
     break; 
    case 1: 
     resId = R.layout.picture2; 
     view = inflater.inflate(resId, null); 
     break; 
    case 2: 
     resId = R.layout.picture3; 
     view = inflater.inflate(resId, null); 
     break; 
    case 3: 
     resId = R.layout.picture4; 
     view = inflater.inflate(resId, null); 
     break; 
    case 4: 
     resId = R.layout.picture5; 
     view = inflater.inflate(resId, null); 
     break; 
    case 5: 
     resId = R.layout.picture6; 
     view = inflater.inflate(resId, null); 
     break; 
    } 

    ((ViewPager) collection).addView(view, 0); 

    return view; 
} 

@SuppressWarnings("unused") 
private Context getApplicationContext() { 
    // TODO Auto-generated method stub 
    return null; 
} 


private void setVolumeControlStream(int streamMusic) { 
    // TODO Auto-generated method stub 

} 


@SuppressWarnings("unused") 
private Context getBaseContext() { 
    // TODO Auto-generated method stub 
    return null; 
} 


@SuppressWarnings("unused") 
private PagerAdapter findViewById(int myfivepanelpager) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 

} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

public static Integer getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

OnPageChangeListener;

package com.example.pictures; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 


public class Pictures extends Activity implements OnPageChangeListener{ 
SoundManager snd; 
int sound1,sound2,sound3; 
View view=null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.picturespage); 

MyPagerAdapter adapter = new MyPagerAdapter(); 
ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
myPager.setAdapter(adapter); 
myPager.setCurrentItem(0); 
myPager.setOnPageChangeListener(this); 
snd = new SoundManager(this); 
sound1 = snd.load(R.raw.sound1); 
sound2 = snd.load(R.raw.sound2); 
sound3 = snd.load(R.raw.sound3); 

} 
public void onPageScrollStateChanged(int arg0) { 
    // TODO Auto-generated method stub 

} 

public void onPageScrolled(int arg0, float arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

public void onPageSelected(int position) { 
    // TODO Auto-generated method stub 

    switch (position) { 
    case 0: 
      snd.play(sound1); 
     break; 
    case 1: 
     snd.play(sound2); 
     break; 
    case 2: 
      snd.play(sound3); 
     break; 
    case 3: 
     Toast.makeText(this, "1", Toast.LENGTH_SHORT).show(); 
     break; 
    case 4: 
     Toast.makeText(this, "2", Toast.LENGTH_SHORT).show(); 
     break; 
    case 5: 
     Toast.makeText(this, "3", Toast.LENGTH_SHORT).show(); 
     break; 
    } 
} 
}; 
+0

雖然它並不完美,我發佈一個答案到相同的問題[這裏](http://stackoverflow.com/a/12965787/642160)。 (主要問題是在循環時它會瞬間閃爍。) – benkc

回答

0

這裏有一個建議,你嘗試過使用FragmentStatePagerAdapter或FragmentPagerAdapter,而不是正常的PagerAdapter?

它會加載要通過ViewPager滑動的片段,它會在通過擴展片段的類運行應用程序時創建片段。

我建議使用片段,因爲您可以在視圖頁/片段正在加載時編程其他邏輯,例如 - > if(page == lastpage),那麼當前頁面就是這樣。

Viewpager具有的功能

ViewPager yourViewPager.setCurrentItem(0); 

我一般認爲這是你想要的,所以當你的viewpager是一個基本的位置第一個或最後

添加C這樣的邏輯 - A - B - C^- A

'A'在他旁邊會有C和B,並且您將當前項目設置爲(1); 'B'會讓A和C陷入困境,並將當前項目設置爲(2);
等等,等等....

使用它

mViewPager.setOnPageChangeListener 



我希望它能幫助

0
mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int arg0) { 

    } 
    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
     if(arg0 == 0 && (arg1 <= 0.001f && arg1 >= -0.001f)){ 
      mVp.setCurrentItem(list.size()-2, false); 
     }else if(arg0 == list.size() - 1){ 
      mVp.setCurrentItem(1, false); 
     } 
    } 
    @Override 
    public void onPageScrollStateChanged(int arg0) { 

    } 
});