简单的问题,是否有ViewPager.PageTransformer可以动画显示页面翻页效果?
我已经到处找了,但是我找不到它,也不知道如何自己实现它...
谢谢, Cédric
简单的问题,是否有ViewPager.PageTransformer可以动画显示页面翻页效果?
我已经到处找了,但是我找不到它,也不知道如何自己实现它...
谢谢, Cédric
我认为 @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
干杯