V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rangoBen
V2EX  ›  Android

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

  •  1
     
  •   rangoBen · 2020-07-30 12:03:30 +08:00 · 9275 次点击
    这是一个创建于 1579 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教大家一个问题,类似阅读器仿真纸张翻页 有什么好的思路。 <使用 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*希望大家多多帮忙,分析可行我都尝试下

    8 条回复    2023-04-07 21:41:45 +08:00
    fansangg
        1
    fansangg  
       2020-07-30 13:44:53 +08:00   ❤️ 1
    那么多开源的阅读器,都找不到你认为的「优秀解决方案」?
    loginbygoogle
        2
    loginbygoogle  
       2020-07-30 15:22:32 +08:00 via iPhone   ❤️ 2
    我的建议是转行
    AoEiuV020
        3
    AoEiuV020  
       2020-07-30 16:10:21 +08:00
    然而 4 个小时过去了,没有人帮楼主想办法,
    darmau
        4
    darmau  
       2020-07-30 16:21:55 +08:00
    1 、2 楼两个嘴炮帝能灭掉两个美国航母吧
    lwlizhe
        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 的翻页动画不少吧,不至于在翻页的时候都要求可以点击相应的区域吧
    rangoBen
        6
    rangoBen  
    OP
       2020-08-01 11:19:25 +08:00
    @lwlizhe 嗯 我试试
    rangoBen
        7
    rangoBen  
    OP
       2020-08-01 20:22:22 +08:00
    @lwlizhe 感谢回帖。
    早上要着急出门没有细回复,简书方案 就是我的博客。利用 canvas 绘制动画 我已准备好。发帖后我优化了方案 A
    ,直接在单个 item 上绘制动画,目前考虑使用队列单独管理上一个,当前,下一个 view 的绘制结果 btimap,处理好更新。这样屏蔽掉 recyclerview 的滑动事件,由 item view 来处理事件 播放动画,最后动画结束 更新 recyclerview 坐标,刷新缓存队列。
    rangoBen
        8
    rangoBen  
    OP
       2023-04-07 21:41:45 +08:00
    @lwlizhe 不知道你还在 V2 吗,就在昨天,时隔 2 年一位掘金的小伙伴在此想我请教阅读器实现思路,我顺便就将它开源了。我想这个消息应该告诉你,这是项目地址: https://github.com/Western-parotia/BookViewProject ,再次感谢当初认真的与我讨论分析方案,没有这些套路我大概想不到后来的解决方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5418 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:57 · PVG 13:57 · LAX 21:57 · JFK 00:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.