ViewPager页面卷曲

时间:2015-06-22 20:55:58

标签: android android-viewpager

简单的问题,是否有动画页面卷曲效果的ViewPager.PageTransformer?

我一直在寻找各处,但我找不到它,也不知道如何自己实施......

提前致谢, 塞德里克

1 个答案:

答案 0 :(得分:11)

我认为@Cédric是对的 - 这可能不值得。

所以我设法让这个工作,但那里有很多丑陋。

  • 软件架构中有一些胶带。由于页面转换器仅适用于视图,因此应用程序依赖于使用可以处理绘制页面卷曲的自定义布局。所以变压器看起来像这样:

    public static class PageCurlPageTransformer implements PageTransformer {
    
        @Override
        public void transformPage(View page, float position) {
    
            Log.d(TAG, "transformPage, position = " + position + ", page = " + page.getTag(R.id.viewpager));
            if (page instanceof PageCurl) {
                if (position > -1.0F && position < 1.0F) {
                    // hold the page steady and let the views do the work
                    page.setTranslationX(-position * page.getWidth());
                } else {
                    page.setTranslationX(0.0F);
                }
                if (position <= 1.0F && position >= -1.0F) {
                    ((PageCurl) page).setCurlFactor(position);
                }
            }
        }
    

    }

  • 要获得逼真的翻页显示,您必须使用Canvas.clipPath。在模拟器上进行测试时,我无法将其剪切到实际路径。我不得不求助于在设备上进行测试,以便clipPath正常工作。即使关闭硬件加速也无法在仿真器上运行。这让我很有信心,这种情况在所有设备上始终都是正确的。

  • 我刚用自定义布局中的dispatchDraw画了一个冰壶角。这可能不是最好的地方。如果我花了更多的时间,我可能会在视图寻呼机中有一个特殊的装饰视图,并且可以画出卷曲。

  • 您可能会注意到反向分页比分页向前更快。您可能不喜欢正向或反向的动画速度。太糟糕了 - ViewPager没有任何方法来调整投掷速度,所以你得到了你得到的。这是使用ViewPager进行此类事情的另一个限制。

您可以将我的项目视为一个概念验证,您确实可以使用页面卷曲来处理视图寻呼机和页面转换器。希望这能为您提供在项目中实现它所需的功能。

项目在这里:https://github.com/klarson2/PageCurlWithPageTransformer

干杯