我想要做的是Android中的水平旋轉木馬。如何創建carousel ViewPager?
如果我有3個屏幕AB和C,那麼我想我ViewPager讓我動如 一個< - > B, 乙< - > C, Ç< - > A.
的GTalk的Android的對話可以像這樣切換。 三星的主屏幕和應用程序屏幕可以像這樣切換。
A B和C是碎片,我使用的是擴展FragmentPagerAdapter的適配器。所有的片段將包含一個webview。
任何人都可以引導我在正確的方向嗎?
我想要做的是Android中的水平旋轉木馬。如何創建carousel ViewPager?
如果我有3個屏幕AB和C,那麼我想我ViewPager讓我動如 一個< - > B, 乙< - > C, Ç< - > A.
的GTalk的Android的對話可以像這樣切換。 三星的主屏幕和應用程序屏幕可以像這樣切換。
A B和C是碎片,我使用的是擴展FragmentPagerAdapter的適配器。所有的片段將包含一個webview。
任何人都可以引導我在正確的方向嗎?
落實getItem(int position)
這樣的:
public Fragment getItem(int position)
{
switch(position)
{
case 0:
Fragment A = new A();
return A;
case 1:
Fragment B = new B();
return B;
same for C....
}
}
你也可以看看這裏:SimpleViewPager ..下載源代碼並理解它。希望能幫助到你。
(跨發佈my answer從相同的StackOverflow問題)
一種可能性是建立這樣的畫面:
C 'ABCA'
C」看起來就像C,但是當你滾動到那裏,它將你切換到真實的C。 A'看起來就像A,但當你滾動到那裏時,它會將你切換到真實的A.
我會通過執行onPageScrollStateChanged像這樣:
@Override
public void onPageScrollStateChanged (int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
int curr = viewPager.getCurrentItem();
int lastReal = viewPager.getAdapter().getCount() - 2;
if (curr == 0) {
viewPager.setCurrentItem(lastReal, false);
} else if (curr > lastReal) {
viewPager.setCurrentItem(1, false);
}
}
}
注意,這個調用的setCurrentItem的另一種形式,並通過false
造成跳轉到瞬間發生的,而不是一個平滑滾動。
我看到這個有兩個主要缺陷。首先,在達到任何一端時,用戶必須先讓滾動結束,然後才能繼續前進。其次,這意味着在第一頁和最後一頁中都有第二個副本。取決於屏幕的資源量,這可能會排除這種技術作爲一種可能的解決方案。
還要注意,由於視圖尋呼機不讓點擊通過底層控件,直到滾動結算之後,可能沒有爲A'和C'片段設置clicklisteners等。
編輯:現在自己實現了這個,還有另一個主要的缺點。當它從A'切換到A或C'切換到C時,屏幕至少會在當前的測試設備上閃爍片刻。
我已經試過了。還有其他一些問題。如果A中某些觀點發生了變化,那麼A'也應該反映相同。就好像你已經在A中滾動,然後如果你去A',它會向你顯示未滾動的屏幕一秒鐘,並再次閃爍。 – Enigma 2012-10-19 07:04:23
ViewPager設置:
mViewPager = (ViewPager) findViewById(R.id.view_pager);
mViewPager.setAdapter(new YourPagerAdapter(getSupportFragmentManager()));
//Set the number of pages that should be retained to either side of the current page.
mViewPager.setOffscreenPageLimit(1);
mViewPager.setCurrentItem(50);
FragmentPagerAdapter:
public class YourPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 100;
final int REAL_PAGE_COUNT = 3;
public YourPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
while (position > REAL_PAGE_COUNT - 1) {
position = position - REAL_PAGE_COUNT ;
}
switch (position) {
case 0:
return FirstFragment.newInstance(position);
case 1:
return SecondFragment.newInstance(position);
case 2:
return ThirdFragment.newInstance(position);
}
return null;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
您可以檢查[本教程(http://thedeveloperworldisyours.com/android/carousel-viewpager/#sthash.rtkOS5m2.J9bGU21I .dpbs)和[GitHub中的示例](https://github.com/thedeveloperworldisyours/CarouselViewPager) – Cabezas 2017-04-21 08:02:43