Вертикальная прокрутка страниц в ViewPager - PullRequest
10 голосов
/ 20 января 2012

Это может быть очевидным и совершенно ненужным постом, но у меня возникла довольно серьезная проблема, связанная с разрешением способа вертикальной прокрутки на страницах в VewPager, и было очень мало разрешений, встречающихся в Google и даже здесь. Я нашел некоторые претензии, чтобы решить проблему, но они, казалось, были расширены и запутаны. Так что для тех, кто может искать ту же проблему, есть решение. Благодаря этому (и вы захотите создать строки большего размера, чем я написал здесь) вы сможете вертикально прокручивать контент и пролистывать страницы.

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>

класс прокрутки с прокруткой

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 ]

1 голос
/ 08 февраля 2013

Я добился этого, установив screenOrientation в альбомную ориентацию, а затем поместив содержимое окна просмотра, как если бы оно находилось в портретном режиме.

1 голос
/ 20 января 2012

Я сделал аналогичный, используя фрагменты в viewpager.tabWigdet может отображаться или нет.этот пример включен в демонстрационное приложение android-support-v4.

...