這可能是顯而易見的,也是完全不需要的文章,但我一直在解決一個方法來允許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);
}
}
}
我願意接受批評的代碼,但至少在這裏是一個正常運作的例子
這一個只是允許垂直滾動在水平viewpager。檢查這是一個完整的垂直viewpager https://github.com/JakeWharton/Android-DirectionalViewPager – Bastiat
所以你說你的代碼導致垂直ViewPager,但實際上只是一個正常的,水平,viepager。我錯了嗎 ? – Paul
使用圖書館https://github.com/castorflex/VerticalViewPager –