Android:如何使用滚动条实现ViewPager?

时间:2013-10-23 05:46:38

标签: android android-viewpager scrollbar

我遇到了一个具有挑战性的问题,想看看社区是否对其实施有一些评论。

我有一个ViewPager并在其中添加了20个页面,每个页面都有一个WebView。 - 这提供了多个网站之间的垂直页面翻转 默认情况下它应该作为ViewPager工作,但是当我捏缩放时,每个页面都会收缩,ViewPager会像列表视图一样滚动。 我不想使用像列表视图这样的不同视图,因为我想要平滑过渡,并且这两种模式使用相同的Web内容,因此要避免任何可能影响平滑过渡的构造/解构。 我能够使用VelocityViewPager实现此滚动ViewPager。

我想要做的是添加滚动条以通过按住并拖动滚动条向下导航页面,就像PC的行为一样 - 而不是仅显示滚动条但不允许交互的ListView。我创建了一个自定义视图,看起来像一个滚动条,并在滚动条移动时执行ViewPager的假拖动。问题是我只能滚动ViewPager所持有的页面 - 所以当ViewPager保留整个20页时,它运行良好但是如果我保留3页默认使用页面回收,它不会滚动到3以上。似乎好像它不会创建用手指滚动时通常会出现的下一页。

我不确定为什么ViewPager在假拖动时不会创建下一页。除了beginFakeDrag(),endFakeDrag()和fakeDragBy()之外,还有什么我必须做的吗? 而且,如果不在ViewPager中保留所有20个页面,我有什么办法可以实现这种行为吗?

1 个答案:

答案 0 :(得分:0)

查看此代码,这可能对您有用:

 public class MainActivity extends Activity {

    @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra);
      ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
      myPager.setAdapter(adapter);
      myPager.setCurrentItem(0);
     }

     private int imageArra[] = { R.drawable.gallery_photo_1, R.drawable.gallery_photo_2,
       R.drawable.gallery_photo_3, R.drawable.gallery_photo_5,
       R.drawable.gallery_photo_6, R.drawable.gallery_photo_7,
       R.drawable.gallery_photo_8, R.drawable.ic_launcher };

} 

和ViewPager类是:

public class ViewPagerAdapter extends PagerAdapter {

Activity activity;
int imageArray[];

public ViewPagerAdapter(Activity act, int[] imgArra) {
    imageArray = imgArra;
    activity = act;
}

public int getCount() {
    return imageArray.length;
}

public Object instantiateItem(View collection, int position) {
    ImageView view = (ImageView) collection.findViewById(R.id.image);
    /*
     * view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
     * LayoutParams.FILL_PARENT)); view.setScaleType(ScaleType.FIT_XY);
     */
    view.setBackgroundResource(imageArray[position]);
    ((ViewPager) collection).addView(view, 0);
    return view;
}

@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;
}

}