IOS 做阅读页动画基于试图就行, android 非要 bitmap 或者 opengl 才行?

2020-07-30 12:03:30 +08:00
 rangoBen

请教大家一个问题,类似阅读器仿真纸张翻页 有什么好的思路。 <使用 1 个 view 多个 bitmap 交替绘制思路,无法应对复杂的子 view 布局,view 广告引入,复杂的点击区域处理,所以后来放弃了> ios 的解决方案很优秀,人家 view 就能卷曲,android 的一言难尽[Facepalm]

目前使用 recyvlerview 作为 view 缓存管理,利用 layoutmanager 制作了,平移,y 轴翻转动画 详细可看这里: https://www.jianshu.com/p/1992d49e5fbf 现在想引入卷曲动画(俗称仿真动画)

目前方案 A:基于根 view 缓存整体渲染效果到 bitmap 在根布局 onDrawForeground 绘制卷曲动画,view 接受滑动事件,绘制效果,并将平移距离传递给 recyclerview 更新坐标 优点:单页 view 依然保持解耦,无需关系事件 缺点盲点:上一页怎么办?如何处理上一页效果呢,子 view 刷新了呢?

/:8*希望大家多多帮忙,分析可行我都尝试下

5220 次点击
所在节点    Android
8 条回复
fansangg
2020-07-30 13:44:53 +08:00
那么多开源的阅读器,都找不到你认为的「优秀解决方案」?
loginbygoogle
2020-07-30 15:22:32 +08:00
我的建议是转行
AoEiuV020
2020-07-30 16:10:21 +08:00
然而 4 个小时过去了,没有人帮楼主想办法,
darmau
2020-07-30 16:21:55 +08:00
1 、2 楼两个嘴炮帝能灭掉两个美国航母吧
lwlizhe
2020-07-30 16:56:56 +08:00
额,没太看懂楼主说的目前方案,简书的那个方法我也没试过…………不过看这么长时间也没人说,那我自告奋勇献个丑

先根据我自己理解说下哈

不过既然都有 recyclerView 管理子 View 了,为啥不直接拦截 recyclerView 的拖拽这块的手势(其他手势当然放行了),自己通过代码控制处理,然后分发给相应的子 View 呢?

讲道理 recyclerView 本身拿到了,像 layoutmanager 什么的也能拿到,那应该基于 layoutManager 管理的那些 measure,layout 布局也能修改;

举个例子,
recyclerView 监听到翻到下一页这个手势,那么分发给当前页,让它做出相应的翻页动画;
监听到上一页这个手势,那么分发给上一页,让第一页做出相应动画呗;

我感觉贴出来的那个简书文章方案很不错啊,唯一问题是仿真翻页那块他用 openGL 改写的,我感觉可以直接重写子 View 的 draw 方法,在 canvas 上改改,应该基于 canvas 的翻页动画不少吧,不至于在翻页的时候都要求可以点击相应的区域吧
rangoBen
2020-08-01 11:19:25 +08:00
@lwlizhe 嗯 我试试
rangoBen
2020-08-01 20:22:22 +08:00
@lwlizhe 感谢回帖。
早上要着急出门没有细回复,简书方案 就是我的博客。利用 canvas 绘制动画 我已准备好。发帖后我优化了方案 A
,直接在单个 item 上绘制动画,目前考虑使用队列单独管理上一个,当前,下一个 view 的绘制结果 btimap,处理好更新。这样屏蔽掉 recyclerview 的滑动事件,由 item view 来处理事件 播放动画,最后动画结束 更新 recyclerview 坐标,刷新缓存队列。
rangoBen
2023-04-07 21:41:45 +08:00
@lwlizhe 不知道你还在 V2 吗,就在昨天,时隔 2 年一位掘金的小伙伴在此想我请教阅读器实现思路,我顺便就将它开源了。我想这个消息应该告诉你,这是项目地址: https://github.com/Western-parotia/BookViewProject ,再次感谢当初认真的与我讨论分析方案,没有这些套路我大概想不到后来的解决方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX