0

我正在开发一个专门的电子书应用程序,其中一个要求是它一次只能显示一页文本,包括格式等等。事实证明,这比我想象的更具挑战性,但我终于成功地做到了。

但是,现在我遇到了另一个问题,即客户端希望能够在页面之间来回翻转,ViewPager 样式,页面跟随手指。现在,这些书籍和经文的页数不是预先确定的,因为我会在每次加载一章时即时计算它们,以便视图自动处理文本大小等的变化。

我一直在研究各种形式的“无限 ViewPager 翻转”,但到目前为止,我还没有找到一种似乎适合我的目的。

我一直在考虑,我希望有人可以帮助我,是这样的:

  • 三页,差不多。当前正在查看的一个,每侧一个用于翻转。
  • 当用户翻到新页面时,视图会在后台切换位置,使新页面成为中间的页面,并加载下一页,同时将之前查看的页面移动到另一端。
  • 如果动画(包括手势跟随)可以通过其他方式实现,它在技术上不一定是 ViewPager。

我会为此提供额外的声望点,因为我真的很想快速解决这个问题,但不幸的是我还没有设法得到很多。

4

2 回答 2

0

当您想使用 ViewPager 解决问题时,您需要在 onCreate 方法中使用它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager = (ViewPager) findViewById(R.id.pager);
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();

    // Capture ViewPager page swipes
    ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);

            if (fistswitch) {
                mPager.setCurrentItem(1);
                fistswitch = false;
            } else {
                // here you can use the replace method, to switch the
                // fragment behind the scenes
                ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();
                Collections.addAll(fragmentList, new Fr2(), new Fr3(), new Fr4());

                mPagerAdapter.addFragments(fragmentList);
                // after the first switch you can use the the second page
                // continuously as middle
                mPager.setCurrentItem(1);
            }
        }
    };
    mPager.setOnPageChangeListener(ViewPagerListener);
    mPagerAdapter = new ViewPagerAdapter(fm);
    mPager.setAdapter(mPagerAdapter);
    ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();
    Collections.addAll(fragmentList, new Fr1(), new Fr2(), new Fr3());

    mPagerAdapter.addFragments(fragmentList);

}

寻呼机适配器类可以是您活动中的私有类,如下所示:

private class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragmentList = new ArrayList<Fragment>();

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public void addFragments(List<Fragment> fragments) {
        fragmentList.clear();
        fragmentList.addAll(fragments);
        notifyDataSetChanged();
    }

    public void replaceFragment(int position, Fragment fr) {
        fragmentList.remove(position);
        fragmentList.add(position, fr);
        notifyDataSetChanged();
    }

    @Override
    public int getItemPosition(Object object) {
        if (fragmentList.contains(object)) {
            return POSITION_UNCHANGED;
        }
        return POSITION_NONE;
    }

    @Override
    public Fragment getItem(int item) {
        if (item >= fragmentList.size()) {
            return null;
        }
        return fragmentList.get(item);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

我没有测试过代码,但它在类似的情况下对我有用。

于 2013-07-26T00:24:29.793 回答
0

有一些很好的方法可以将动画添加到 ViewPager,或者使用您自己的自定义视图。第一个是 jfeinstein10 的一个名为 JazzyViewPager 的开源项目。这个库非常好,并且内置了一些动画。我过去看过源代码,如果需要,创建自己的动画应该很简单。第二种选择是使用 JazzyViewPager 中使用的,即 ViewHelper,这是 Jake Wharton 在 NineOldAndroids 动画库中的一个类。

于 2013-07-25T20:18:44.687 回答