2012-01-20 91 views
10

這可能是顯而易見的,也是完全不需要的文章,但我一直在解決一個方法來允許VewPager中的頁面上的垂直滾動功能,並且有很少的解決方案通過谷歌甚至這裏。我發現一些人聲稱可以解決這個問題,但他們似乎被延長和糾結。因此,對於那些可能正在尋找相同問題的人來說,解決方案就是如此。有了這個(你會想比我寫的更大的字符串),你將能夠垂直滾動內容並在頁面之間滑動。在ViewPager中垂直滾動頁面

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v4.view.ViewPager 
    android:id="@+id/conpageslider" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
</LinearLayout> 

滾動viewpager類

public class ScrollingViewPager extends Activity{ 

private ViewPager pager; 
private Context cxt; 
private CharSequence[] pages = {"stuff", "more stuff", "other stuff"}; 
private PageSlider ps; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.layout); 
    cxt = this; 
    ps = new PageSlider(); 
    pager = (ViewPager) findViewById(R.id.conpageslider); 
    pager.setAdapter(ps);  

} 

public class PageSlider extends PagerAdapter{ 

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

    @Override 
    public Object instantiateItem(View collection, int position) { 
     ScrollView sc = new ScrollView(cxt); 
     sc.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     sc.setFillViewport(true); 
     TextView tv = new TextView(cxt); 
     tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     tv.setText(pages[position]); 
     tv.setPadding(5,5,5,5);   
     sc.addView(tv); 
     ((ViewPager) collection).addView(sc); 

     return sc; 
    } 

    @Override 
    public void destroyItem(View collection, int position, Object view) { 
     ((ViewPager) collection).removeView((ScrollView) view); 
    } 

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

} 
} 

我願意接受批評的代碼,但至少在這裏是一個正常運作的例子

+2

這一個只是允許垂直滾動在水平viewpager。檢查這是一個完整的垂直viewpager https://github.com/JakeWharton/Android-DirectionalViewPager – Bastiat

+0

所以你說你的代碼導致垂直ViewPager,但實際上只是一個正常的,水平,viepager。我錯了嗎 ? – Paul

+0

使用圖書館https://github.com/castorflex/VerticalViewPager –

回答

1

我做的,使用相似的一個在viewpager中的片段。 tabWigdet可以顯示或不顯示。 該示例包含在android-support-v4演示應用程序中。

1

我通過將screenOrientation設置爲橫向,然後將viewpager的內容設置爲縱向模式來實現此目的。

+0

你能舉個例子嗎?謝謝 – Paul

+0

那麼viewpager中的所有對象呢?它會變成旋轉嗎? –