Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持大佬重写 #14

Open
wozhizhizhi opened this issue Mar 11, 2021 · 45 comments
Open

支持大佬重写 #14

wozhizhizhi opened this issue Mar 11, 2021 · 45 comments

Comments

@wozhizhizhi
Copy link

支持大佬重写,第一个版本代码看的有点痛苦😊

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 11, 2021

额,我尽快,现在在忙提桶跑路的事~~~~

目前设想是搞一个基于listView这块的;
让阅读页基于widget而非以前的canvas,动画这块对RenderObject本身来做处理,使其跟Widget完全隔离,专注于动画层面;
不过分页逻辑这些改动应该不大~

@beyondbkcy
Copy link

@lwlizhe 可以做成插件吗

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 11, 2021

@lwlizhe 可以做成插件吗

额……只能说,这个项目基于的listView的这块能做成插件,这也是我本来的目的;
其他地方就是业务涉及的部分,有很大的自定义性质,做成插件了反而不好自定义了%……总不能所有人都跟我用一个布局和样式吧~

@beyondbkcy
Copy link

@lwlizhe 我说仿真翻页那个效果,我现在要做一个图片加文字的pageview页面,切换效果就需要用到这个效果

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 11, 2021

@lwlizhe 我说仿真翻页那个效果,我现在要做一个图片加文字的pageview页面,切换效果就需要用到这个效果

啊,这个啊,你直接复制 animation_page_simulation_turn.dart 文件,自己改改应该就行了,记得传入触摸事件的触摸点位置就可以了。当然别忘了触发其中的onDraw方法让绘制结果展示出来

@beyondbkcy
Copy link

@lwlizhe 还是不懂呀

@beyondbkcy
Copy link

@lwlizhe 你有时间能帮我弄弄吗

@wozhizhizhi
Copy link
Author

大佬追书神器的接口好像不能用了,这个api还可以用,你可以试试https://easydoc.xyz/doc/45910076/WP3yrgI7/qiNSgnu3

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

@lwlizhe 你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;

如果你只是单纯想要翻页动画,那么步骤这样的:
1、拦截手势并调用onTouchEvent 传入;
2、触发绘制(比如说我这里就是用的markNeedsPaint 方法),并调用onDraw方法;
3、完事~~

涉及代码有widget_reader_content第63行的RawGestureDetector 部分;widget_reader_painter 的 20行 paint 方法;剩下的就是animation_page_simulation_turn 方法里面的部分,不过这块你也不用关心,高度内聚,只要传入手势和坐标参数,调用绘制方法就给你绘制到指定canvas上了

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

大佬追书神器的接口好像不能用了,这个api还可以用,你可以试试https://easydoc.xyz/doc/45910076/WP3yrgI7/qiNSgnu3

okok,非常感谢,只是最近比较忙~几个面试在走,工作上也还没彻底离职;所以最近一段时间可能时间并不多;

考虑到这个项目只是学习性质,主要功能还真不是看小说那帮(好像这玩意最近打击蛮大的,搞不好还真可能进去了);所以我计划是随重写部分、flutter2.0升级 一起完成,另外可能采用假数据啊,甚至是像网易云音乐那种本地代理方式来做小说内容部分处理,不过要是这个api比较稳定可靠,那换成这个倒也没问题;

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

大佬追书神器的接口好像不能用了,这个api还可以用,你可以试试https://easydoc.xyz/doc/45910076/WP3yrgI7/qiNSgnu3

唉卧槽,这接口可以啊,还有漫画和视频,NB了唉;
粗略试了下漫画和视频,巨人这种也有;就是视频这块返回的是一个m3u8……没太搞懂怎么用

不过小说这块听全乎的,搜了下差不多都有……NB了

@beyondbkcy
Copy link

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;

如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事〜 〜

涉及代码有widget_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行paint方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

呜呜

@beyondbkcy
Copy link

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;

如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事〜 〜

涉及代码有widget_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行paint方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;
如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事〜 〜
涉及代码有widget_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行paint方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

额,这样吧,你看下这个BookPage,他那还附有文字教程,这样比较好理解;我这个也不过是在上面稍微做了一丁点的优化,差别不大

@beyondbkcy
Copy link

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;
如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事〜
直到涉及到代码有小部件_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行绘画方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

额,这样吧,你看下这个书页,他那还附有文字教程,这样比较好理解;我这个也不过是在上面稍微做了一丁点的优化,分解不大

原生的我更加懵

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;
如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事〜
直到涉及到代码有小部件_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行绘画方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

额,这样吧,你看下这个书页,他那还附有文字教程,这样比较好理解;我这个也不过是在上面稍微做了一丁点的优化,分解不大

原生的我更加懵

额……如果你看的比较困难,那先跟着他那教程来,自己走一遍,我当初也是看不懂最初的Android小说阅读器,后来这个大佬出了这个教程,跟着走一遍就明白了

@beyondbkcy
Copy link

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;
如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事
直到直到涉及到代码有小部件_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行绘画方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

额,这样吧,你看下这个书页,他那还附有文字教程,这样比较好理解;我这个也不过是在上面稍微做了一丁点的优化,分解不大

原生的我更加懵

额……如果你看的比较困难,那先跟着他那教程来,自己走一遍,我当初也是看不懂最初的Android小说阅读器,后来这个大佬出了这个教程,跟着走一遍就明白了

你能帮帮我吗,要多少¥

@wozhizhizhi
Copy link
Author

好的大佬,这个不急,第一个版本我也还没完全搞懂,在摸索学习中

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 15, 2021

@lwlizhe你有时间能帮我弄弄吗

额,这个其实不难的,你静下心来好好看一下,别那么急躁,分分钟就会用了;
我简单的跟你说下怎么弄;
如果您
只是单纯的想要翻页动画,那么步骤这样的:1,拦截手势并在onTouchEvent上调用;
2,触发切换(称为说我这里就是用的markNeedsPaint方法),并在onDraw方法上调用;
3,完事
直到直到涉及到代码有小部件_reader_content第63行的RawGestureDetector部分; widget_reader_painter的20行绘画方法;剩下的就是animation_page_simulation_turn方法里面的部分,不过这块你也不用担心,高度内聚,只要用手势和坐标参数,应该注意方法就给你重新定位到指定画布上了

看了好久都没看懂

额,这样吧,你看下这个书页,他那还附有文字教程,这样比较好理解;我这个也不过是在上面稍微做了一丁点的优化,分解不大

原生的我更加懵

额……如果你看的比较困难,那先跟着他那教程来,自己走一遍,我当初也是看不懂最初的Android小说阅读器,后来这个大佬出了这个教程,跟着走一遍就明白了

你能帮帮我吗,要多少¥

额,最近没时间~
这个你可以加一下别的技术交流群问下

@superwei629
Copy link

支持大佬重写 ,实在看不懂

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 22, 2021

支持大佬重写 ,实在看不懂

我的锅~~~~这回尽量做好注释和拆分~~

@mabDc
Copy link

mabDc commented Mar 24, 2021

来推销我的排版效果: 分栏 分页 两端对齐 高度对齐等效果


E3Z@FG25IXJ)I 6Y1(HDD$W

$}C 5XZ6BHL_3X}HCSXHPGV


一个文本两端对齐和分页(可选底栏对齐)工具(处理一屏幕文字耗时约5ms)

https://github.com/mabDc/text_composition

@mabDc
Copy link

mabDc commented Mar 24, 2021

https://stackoverflow.com/questions/57802420/how-to-create-page-curl-effect

@lwlizhe 这个效果也很棒,而且他写的非常简单,大佬有空可以看看。

(…其实想不通你分页为啥那么慢。我两端对齐,上下对齐,加分页,300页的一卷小说也在2s之内。

@mabDc
Copy link

mabDc commented Mar 25, 2021

@beyondbkcy 这个文件单文件简单改成免继承或者继承CustomPainter的形式直接就能用 作者写的很棒
https://github.com/lwlizhe/flutter_novel/blob/master/lib/app/novel/widget/reader/content/helper/animation/animation_page_simulation_turn.dart

修改成免继承的形式
https://github.com/mabDc/text_composition/blob/main/test/lwlizhe.dart


图片名称

@lwlizhe 实际上就是你的animation_page_simulation_turn放进一个跟随animation重绘的painter就可以了
主要实现类似 https://stackoverflow.com/questions/57802420/how-to-create-page-curl-effect

@beyondbkcy
Copy link

@beyondbkcy 这个文件单文件简单改成免继承或者继承CustomPainter的形式直接就能用 作者写的很棒
https://github.com/lwlizhe/flutter_novel/blob/master/lib/app/novel/widget/reader/content/helper/animation/animation_page_simulation_turn.dart

修改成免继承的形式
https://github.com/mabDc/text_composition/blob/main/test/lwlizhe.dart

~Q{VFM57JUF4)M3 NW$40Z

那我应该怎么用呢

@mabDc
Copy link

mabDc commented Mar 25, 2021

先执行calcCornerXY(x, y, size)表示手指按下,比如calcCornerXY(size.width, size.height, size)是按了右下角。
然后执行下面两行就可以了。最简单就是放进一个继承至CustomPainterclass里,然后onpaint方法重绘就完事儿。

calBezierPoint(Offset(x, size.height), size);
onDraw(canvas, Offset(x, size.height), size, picture!);

比如这样
H%_W M2BSFTKL$NQ7_AD($G

@beyondbkcy
Copy link

先执行calcCornerXY(x, y, size)表示手指按下,比如calcCornerXY(size.width, size.height, size)是按了右下角。
然后执行下面两行就可以了。最简单就是放进一个继承至CustomPainterclass里,然后onpaint方法重绘就完事儿。

calBezierPoint(Offset(x, size.height), size);
onDraw(canvas, Offset(x, size.height), size, picture!);

主要是我只知道在哪用,比如我现在有个pageview,老板说滑动效果太单调了,要换成翻页,请问这怎么换,pageview怎么和你那个文件结合

@mabDc
Copy link

mabDc commented Mar 25, 2021

看你要简单还是复杂 最简单就是只用从右往左的动画 那其他都不用画了 你只需要画当前页矩阵裁剪左边,下一页也用矩形裁剪右边 然后画背面和阴影 完事儿。我截图的效果就是最简单的

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 25, 2021

https://stackoverflow.com/questions/57802420/how-to-create-page-curl-effect

@lwlizhe 这个效果也很棒,而且他写的非常简单,大佬有空可以看看。

(…其实想不通你分页为啥那么慢。我两端对齐,上下对齐,加分页,300页的一卷小说也在2s之内。

额,那你这块的实现方式是?

简单的来说,
我这用的textPainter来做的,所以因为textPainter.layout方法是个CPU密集型任务,所以在UI Isolate中调用会jank,因此我用native做桥梁,将其放到一个新的Flutter enginer中去做

好长时间前的东西了,也忘了具体分页效率咋样~~但是章节跳转那种,也就是重新计算分页的过程,从Gif图上来看,好像问题不大,前、后、当前三章加载完好像也是2-3秒的样子~

所以,你那块测试是特别慢么,flutter的版本是?具体的测试单元能提供一下么?

@mabDc
Copy link

mabDc commented Mar 25, 2021

我自己分页几百次也不到2s 你的项目跑起来 动画不卡 但是加载条特别久

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 25, 2021

我自己分页几百次也不到2s 你的项目跑起来 动画不卡 但是加载条特别久

额,进度条这块是从网络请求到最后分页、缓存完成后才消失的~

所以其实影响因素不少,比如说网络卡顿就会造成进度条特别长,毕竟那个api记得是早就挂了的……

那我这有空再看下~~就当入职新工作前复习flutter用了~

@mabDc
Copy link

mabDc commented Mar 25, 2021

比如一章第18页 增加字号 它重新分页 就等太久了

@lwlizhe
Copy link
Owner

lwlizhe commented Mar 25, 2021

比如一章第18页 增加字号 它重新分页 就等太久了

额,那你这块有什么好的方案么?我这确实也没想到除了重新分页以外的方法

@mabDc
Copy link

mabDc commented Mar 25, 2021

eso.2021-03-25.21-03-17_x264.mp4

用了大佬的代码 改改就能行 效果看录屏

https://github.com/lwlizhe/flutter_novel/blob/master/lib/app/novel/widget/reader/content/helper/animation/animation_page_simulation_turn.dart

(实际上 我做成插件的形式

@mabDc
Copy link

mabDc commented Apr 6, 2021

比如一章第18页 增加字号 它重新分页 就等太久了

额,那你这块有什么好的方案么?我这确实也没想到除了重新分页以外的方法

这样子呢。调整时看预览而不是全部排版。比如字号增加可能改几次,先预览再慢慢排版

@lwlizhe
Copy link
Owner

lwlizhe commented Apr 6, 2021

比如一章第18页 增加字号 它重新分页 就等太久了

额,那你这块有什么好的方案么?我这确实也没想到除了重新分页以外的方法

这样子呢。调整时看预览而不是全部排版。比如字号增加可能改几次,先预览再慢慢排版

也行啊,交互这块主要看个人习惯什么的,这个由你决定;

我主要是想在不改交互的基础上有没有什么好的方案~
看了下你分页这块的代码,其实跟我的一样的……

所以我在想,真正导致分页慢的原因是不是其实不是分页这块,而是后面转成bitmap这块的处理~后续有空追踪下

@mabDc
Copy link

mabDc commented Apr 9, 2021

5T)8%TKQW@TEKI7A4)CMGIQ

}~6{2RIO8FAML$HF GP4YK9

@U7V0BB3 $ZIXI) _G}RT

简易版仿真 (不到40行。)

(还是比较喜欢全部能翻页的

@beyondbkcy
Copy link

5T)8%TKQW@TEKI7A4)CMGIQ

}~6{2RIO8FAML$HF GP4YK9

@U7V0BB3 $ZIXI) _G}RT

简易版仿真 (不到40行。)

(还是比较喜欢全部能翻页的

源码能发出来吗

@mabDc
Copy link

mabDc commented Apr 10, 2021

又加了双面翻页

$E2RMY6~KO`W_HYI)F2Y8PB

9Y_VUB%WQBSX6MQ6AN{VA

%C8F_5ZGU)K}I8D220QH1DP

HZQQVXH9AYL4JCE5L)AJ3}8

@beyondbkcy
Copy link

@wozhizhizhi
Copy link
Author

为何叫简易版仿真?

@panhuiAipami
Copy link

是有点过于难懂,代码量太大

@superwei629
Copy link

三个月过去了。。

@zhou-pro
Copy link

zhou-pro commented Aug 2, 2023

eso.2021-03-25.21-03-17_x264.mp4
用了大佬的代码 改改就能行 效果看录屏

https://github.com/lwlizhe/flutter_novel/blob/master/lib/app/novel/widget/reader/content/helper/animation/animation_page_simulation_turn.dart

(实际上 我做成插件的形式
对角翻页怎么没有了?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants