安卓页面翻页动画

57
  1. 有没有一种简单的方法可以实现Curl页面翻转动画?Curl动画是指页面翻转的动画,包括上面的页面滚动和下面页面上的阴影。
  2. 如何建议实现“画廊”,以同时显示两页(就像一本书)?

    是这样吗:

    1. 让适配器显示每次线性布局中的两个图像?(它不会让我像书一样显示一个页面翻转过另一个)
    2. 使用两个页面,将其中一个放在另一个页面旁边,然后当需要进行动画时-移动下两页?哪种方法更好,可以使左侧页面翻转到右侧页面上方?

可能是重复的问题:如何在Android上实现页面翻页效果? - derobert
4个回答

22

首先,感谢提供第三次尝试的链接。Switcher很好,但它没有实现苹果所做的事情。你应该在iBooks中看到它以理解。 - Meymann
@Meymann,它不是一个翻转器(项目名称有点不好),而是一个页面翻页效果。项目标志只是应用程序本身的屏幕截图。试试吧。 - Moss
1
你知道吗?我收回之前的话。虽然它仍然不是苹果所展示的Curl,但它非常令人印象深刻。当苹果式的Curl需要兼容性和大量时间的代价时,我宁愿改变要求来使用你的代码。 - Meymann
很高兴听到这个消息:D 我希望很快curl会有它的适配器,这样它就可以使用任何现有的Android视图。 - Moss
是的,我想现在应该还算令人满意。如果我等待苹果卷曲屏,我可能要等很久。苹果确实在这方面投入了大量资金,所以我打赌它已经被专利化了。我不相信在Android上人们会很快做到这一点。毕竟,透明度和反射需要付出很多努力,但效果却很小。我猜那些希望实现真正3D效果的人会使用像Unity 3D这样的东西。 - Meymann

6

嗨,我也在使用Harism的代码,但是当尝试返回到之前的页面时,索引不会保持正确,位图也不会在正确的索引处刷新,我遇到了问题。这是我创建的一个线程https://dev59.com/9XLYa4cB1Zd3GeqPZpYn,请提供建议或想法。 - Prateek

2
我以前没有接触过安卓,但在我看来,实现翻页展示的最佳方式是使用三层绘图。第一层是第一页的文本,第二层是位于下面的“页面”,第三层是下一页。如果你从后往前绘制它们,用户将只看到第一页上的文字。
现在,一旦你拥有了这个,你会想要根据你所使用的控件进行某种形式的翻页/翻转动画。简单地选择任何最适合你完成该动画的方法,但在这样做的同时,使不再存在的页面部分的区域变得透明。这将允许你看到下面页面的文本(好吧,我说谎了。那些文本后面还需要一个背景)。
此时的问题是,你仍然在同一个空间中两次绘制文本,因此你需要将第一页的文本与其下方的动画混合在一起。通过这种方式,在0 alpha部分上方的文本将变得透明。它不会随动画弯曲,所以这可能仍然是个问题,但根据翻转速度的快慢,这可能还好。当动画结束时,只需将第一页设置为第二页,动画重置为纯白色,并将第二页设置为新的第二页。
阴影效果可以通过在翻页动画后面部分透明地加上一些黑色来简单地实现。像动画层已经在做的那样在第二页上绘制,然后就完成了!
我认为你的双页问题可以使用非常类似的方法。祝好运!

谢谢,但我想你可能还没有完全理解Android和问题: A. CURL意味着页面的翻转。在Android中,将页面叠加需要2个页面和一个简单的动画。CURL涉及到扭曲、3D和阴影等数学模型。 B. 在Android中,您应该以不同的路径和加速度插值动画,以使阴影和页面同步。这几乎是不可能的。即使您成功了,性能也会很尴尬。谢谢 M. - Meymann
Meymann:我认为你刚才自相矛盾,称做一个页面翻页的任务是不可能完成的。Lunin是对的,最好的方法是在画布控件上进行严格的2D动画(这在大多数Android设备处理器上都可以很容易地完成),并使用计时器进行动画处理。当然,它也可以使用OpenGL实现,但将近一半的Android设备没有硬件加速或者使用低端GPU。3D是实现的不良选择。一个简单的2D版本(当然还带有一些渐变阴影)就可以胜任。 - mattbasta
再说一遍:“Curl”是翻页的动作。翻页时带有阴影效果,并且将页面的尖端(具有透明度、阴影和3D效果)卷曲到下一页上。iPhone OS中的CURL是一个月的研究和数学模型的成果。在Android中,您可以将一页移到另一页上。阴影意味着另一个完美同步的图层(另一个问题),而只使用2D图形无法实现视图的3D卷曲。 - Meymann
抱歉打扰 - 有没有办法抓取每一页并使用图像而不是实际页面进行处理? - obie

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接