0

我有一个具有挑战性的问题,想看看社区是否对其实施有一些意见。

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

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

我不确定为什么 ViewPager 在假拖动时不创建下一页。除了 beginFakeDrag()、endFakeDrag() 和 fakeDragBy() 之外,我还有什么需要做的吗?而且,有什么方法可以在不将所有 20 个页面保留在 ViewPager 中的情况下实现此行为?

4

1 回答 1

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

}

于 2013-10-23T05:54:11.377 回答