请教大家一个问题,类似阅读器仿真纸张翻页 有什么好的思路。 <使用 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*希望大家多多帮忙,分析可行我都尝试下
1
fansangg 2020-07-30 13:44:53 +08:00 1
那么多开源的阅读器,都找不到你认为的「优秀解决方案」?
|
2
loginbygoogle 2020-07-30 15:22:32 +08:00 via iPhone 2
我的建议是转行
|
3
AoEiuV020 2020-07-30 16:10:21 +08:00
然而 4 个小时过去了,没有人帮楼主想办法,
|
4
darmau 2020-07-30 16:21:55 +08:00
1 、2 楼两个嘴炮帝能灭掉两个美国航母吧
|
5
lwlizhe 2020-07-30 16:56:56 +08:00
额,没太看懂楼主说的目前方案,简书的那个方法我也没试过…………不过看这么长时间也没人说,那我自告奋勇献个丑
先根据我自己理解说下哈 不过既然都有 recyclerView 管理子 View 了,为啥不直接拦截 recyclerView 的拖拽这块的手势(其他手势当然放行了),自己通过代码控制处理,然后分发给相应的子 View 呢? 讲道理 recyclerView 本身拿到了,像 layoutmanager 什么的也能拿到,那应该基于 layoutManager 管理的那些 measure,layout 布局也能修改; 举个例子, recyclerView 监听到翻到下一页这个手势,那么分发给当前页,让它做出相应的翻页动画; 监听到上一页这个手势,那么分发给上一页,让第一页做出相应动画呗; 我感觉贴出来的那个简书文章方案很不错啊,唯一问题是仿真翻页那块他用 openGL 改写的,我感觉可以直接重写子 View 的 draw 方法,在 canvas 上改改,应该基于 canvas 的翻页动画不少吧,不至于在翻页的时候都要求可以点击相应的区域吧 |
7
rangoBen OP @lwlizhe 感谢回帖。
早上要着急出门没有细回复,简书方案 就是我的博客。利用 canvas 绘制动画 我已准备好。发帖后我优化了方案 A ,直接在单个 item 上绘制动画,目前考虑使用队列单独管理上一个,当前,下一个 view 的绘制结果 btimap,处理好更新。这样屏蔽掉 recyclerview 的滑动事件,由 item view 来处理事件 播放动画,最后动画结束 更新 recyclerview 坐标,刷新缓存队列。 |
8
rangoBen OP @lwlizhe 不知道你还在 V2 吗,就在昨天,时隔 2 年一位掘金的小伙伴在此想我请教阅读器实现思路,我顺便就将它开源了。我想这个消息应该告诉你,这是项目地址: https://github.com/Western-parotia/BookViewProject ,再次感谢当初认真的与我讨论分析方案,没有这些套路我大概想不到后来的解决方案。
|