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

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

  •  1
     
  •   rangoBen Jul 30, 2020 13524 views
    This topic created in 2118 days ago, the information mentioned may be changed or developed.

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

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

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

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

    8 replies    2023-04-07 21:41:45 +08:00
    fansangg
        1
    fansangg  
       Jul 30, 2020   1
    那么多开源的阅读器,都找不到你认为的「优秀解决方案」?
    loginbygoogle
        2
    loginbygoogle  
       Jul 30, 2020 via iPhone   2
    我的建议是转行
    AoEiuV020
        3
    AoEiuV020  
       Jul 30, 2020
    然而 4 个小时过去了,没有人帮楼主想办法,
    darmau
        4
    darmau  
       Jul 30, 2020
    1 、2 楼两个嘴炮帝能灭掉两个美国航母吧
    lwlizhe
        5
    lwlizhe  
       Jul 30, 2020
    额,没太看懂楼主说的目前方案,简书的那个方法我也没试过…………不过看这么长时间也没人说,那我自告奋勇献个丑

    先根据我自己理解说下哈

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

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

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

    我感觉贴出来的那个简书文章方案很不错啊,唯一问题是仿真翻页那块他用 openGL 改写的,我感觉可以直接重写子 View 的 draw 方法,在 canvas 上改改,应该基于 canvas 的翻页动画不少吧,不至于在翻页的时候都要求可以点击相应的区域吧
    rangoBen
        6
    rangoBen  
    OP
       Aug 1, 2020
    @lwlizhe 嗯 我试试
    rangoBen
        7
    rangoBen  
    OP
       Aug 1, 2020
    @lwlizhe 感谢回帖。
    早上要着急出门没有细回复,简书方案 就是我的博客。利用 canvas 绘制动画 我已准备好。发帖后我优化了方案 A
    ,直接在单个 item 上绘制动画,目前考虑使用队列单独管理上一个,当前,下一个 view 的绘制结果 btimap,处理好更新。这样屏蔽掉 recyclerview 的滑动事件,由 item view 来处理事件 播放动画,最后动画结束 更新 recyclerview 坐标,刷新缓存队列。
    rangoBen
        8
    rangoBen  
    OP
       Apr 7, 2023
    @lwlizhe 不知道你还在 V2 吗,就在昨天,时隔 2 年一位掘金的小伙伴在此想我请教阅读器实现思路,我顺便就将它开源了。我想这个消息应该告诉你,这是项目地址: https://github.com/Western-parotia/BookViewProject ,再次感谢当初认真的与我讨论分析方案,没有这些套路我大概想不到后来的解决方案。
    About     Help     Advertise     Blog     API     FAQ     Solana     2766 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 72ms UTC 14:37 PVG 22:37 LAX 07:37 JFK 10:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86