- 博客(92)
- 资源 (3)
- 收藏
- 关注
原创 用rust写了一个桌面app,就不再想用kmp了
最近用两周的时间,从原来的kmp桌面平台的pdf阅读器迁移过来70%的功能后,就再也回不去了.除了rust语言不太好学这算缺点外,几乎没有大的缺点了.对比kotlin与kmp全是优点.写一个应用主要是为了对rust更熟悉一些.下一步打算做点别的.
2025-12-07 20:40:41
213
原创 用rust+slint编写一个pdf阅读器2
整个完成下来的感觉就是快.写代码少,完成的功能多.运行速度快.解码服务只关心解码,完成后通道发出去后不管了.状态管理只管页面可见性计算,布局,缓存这些,剩下怎么显示不管了.slint只管数据来了我显示,其它通过各种事件,通知给main中的rust监听代码去触发偏移,可见性计算.这几部分分的真开.你想耦合都不太容易.
2025-12-06 21:12:38
984
原创 用rust+slint编写一个pdf阅读器
最后的效果就是,打开app后,100mb内存占用,打开文档,在300mb左右.然后回收也快,没有内存泄露.运行效果是真的非常快,整个大图片解码20ms,渲染转换也是10ms以内.大概不到30ms就完成解码到转换slint可显示的图片了.然后还有预加载,这样实际的翻页效果与pdf expert这个mac上号称最快的对比,不落下风.中文支持遇到了问题.在m2机器上,显示方块.只能加入默认字体,试了好多种,不能逻辑映射,只能用固定的字体,要么系统安装,要么打包.
2025-12-06 13:27:02
880
原创 android pdf框架-15,mupdf工具与其它
阅读器完善的差不多.发现mupdf还有一些工具,放到移动端中也是可以用的.只是没有mutool这么强.今天主要涉及加密,解密,修改字体等功能。
2025-10-09 16:40:03
674
原创 android pdf框架-14,mupdf重排
前面的文章主要在应用端.本文主要是针对文本重排,从mupdf的导出文本到应用端对这个文本再重排.尽量保持原文的格式方面作些说明.文本重排,对于扫描版,目前不考虑,因为图片的ocr准确度不好,而且要ocr,当前的主流机型一页消耗时间太长.所以只考虑非扫描版,可以用mupdf直接导出文本的.
2025-09-22 08:39:47
660
原创 compose multiplatform reader2
到这里,主要的流程,控件,核心点都结束了.不太难,但是过程是艰辛的,遇到的问题不少.比如page分块遇到了分割线的问题,主要是图片,会在合并时有时比较明显.比如切边的解码问题,动态切边就是每加载一个page切一次,然后重新计算page的高宽.会导致页面变形,于是采用了后台切边所有的页面的方式.比如缩放手势与流畅性的问题,缩放如何保证page能正确绘制.手势结束后的惯性问题,也耗费不少精力与时间.
2025-09-20 08:07:29
962
原创 compose multiplatform reader
mupdf也可以解析tiff,它是整张图片全部载入,这必然受限于内存,最大测试过700m的,再大的就会取消解码,这是它代码限制的.我现在加入了tiff的解码器,目前测试过最大的tiff是3.9gb的,清明上河图是2.3gb的几个都测试过,lzw压缩的解码较慢,因为递归.其它都是非常快的,缩略图更是100多毫秒就出来了.下一篇来说明view的布局,手势,page的展示等相关内容.整个阅读器不算复杂,功能简练.使用中,性能比原来的,是差不多的.优点就是ui方面,基于新的框架,更适合现在的设计.
2025-09-19 21:04:15
601
原创 compose multiplatform 常用库
multiplatform中,旧的库不可用了.需要新的库,新的库,目前不算多,比起其它多平台略少了.这里介绍一些常用的.这两个网站搜索相应的库.
2025-07-18 12:04:43
814
原创 compose 权限使用accompanist
依赖:accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }这里有几个变量,一个是弹出窗口,这是未申请权限时,让用户开始申请.一个是被拒绝了,且不再询问时弹出,让用户去系统设置修改权限.确认再申请,如果被拒绝,而且不再询问,弹出窗口,被拒绝了,确认后进入系统设置.如果申请过,但被拒绝了,弹出自定义弹窗,提示被拒绝.
2025-06-20 16:52:15
326
原创 语音识别-3,添加ai问答
语音app一般都会添加问答功能.最常见的几deepseek.本文就以它为例.申请api不说了.https://api.deepseek.com/chat/completions 这是接口.Authorization:Bearer sk-xxxxxxx( 这是你的key)最简的调用方式:rest客户端的"stream": true表示以流的方式返回数据.一般,流的方式让人感觉快一些.等流全部返回了,时间也差不多了.如果不用流的方式,一次调用可能一分钟.
2025-05-15 09:20:12
436
原创 语音识别-1
AutoDetectSourceLanguageConfig,设置了自动识别语音,就交给sdk了,业务场景,两个对话,一个说一句自己的语音,所以这里把两种同时设置到里面.就可以你说英语,我说中文,然后app自动翻译对方的语言.播放语音有两种可选,一种是用微软的sdk,一种是通过它sdk返回的pcm,自定义一个播放.我这里是自定义,因为用它的有几个问题:停不了,设置蓝牙播放模式需要每次播放前设置,这样会导致播放的时候,前面几个音没了.尤其是短语音.
2025-05-07 17:22:57
987
原创 compose map 源码解析
telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view.最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原理.这是源码.
2025-04-12 20:59:46
1103
原创 telophoto源码查看记录 三
它的tile,先根据固定的大小一块一块排列,然后剩下的如果不是一个tile的大小,会把它与前面的合并成为一个tile.每一个tile,除了自己的大小,还有它对应的采样,因为缩放后这些采样有可能不一样.创建缓存,加载或卸载tile.这里是监控viewportTiles的变化,这是view的tile.除了图片会被划分,先将view划分.当图还没加载的时候,需要去占着位置,所以它是必要的.zoomable的流程,事件分析过了,它作用于任何view,zoomable-image主要是针对图片的.
2025-04-09 15:07:15
1277
原创 telophoto源码查看记录
compose的图片查看器不少,telophoto功能完善,文档详细,支持image外的控件缩放.它支持多平台.打算从它的源码入手,然后作一个自定义的view.
2025-04-08 09:19:56
758
原创 compose multiplatform写一个简单的阅读器2
有so的aar,目前没有找到直接使用的方式,所以要么打一个jar不包含so,然后加一个dylib的引用,要么分开引用不同的包.目前我使用方式二,一个引用aar,一个引用jar,aar可以用mupdf官方的,手机端用.jar就只有自己弄了.对于java/kt程序员,要写一个高质量的桌面端应用,是个不错的选择.虽然我觉得性能与那些比要差一些,实际还好,compose以后性能还会提升的.相比swing,这个太旧,学习成本是比较大,而android程序员的话,成本比较低.有兴趣的人可以在github提pr.
2025-03-02 20:56:12
946
原创 compose multiplatform写一个简单的阅读器
compose multiplatform写一个简单的pdf阅读器,使用mupdf解析pdf.
2025-02-17 18:00:20
867
原创 SubsamplingScaleImageView适配tv
这个方法是处理平移的,SubsamplingScaleImageView它的特点是,先计算中心点,然后再通过对中心点的偏移操作.默认的时候,缩放值不理想.那么在开始时应该先设置一个缩放值.SubsamplingScaleImageView如何适配tv的按键操作的,我看了一下,几乎都是转发同一篇,试用一下效果我就不说了,要是行就没有这篇文章了.这个不复杂,按下时,缩放*1.2,直到超过了最大的值2,然后复位.我这里测试的是默认是0.108,一张超大图片长条型的.清明上河图.普通的应该不会差很多.
2025-02-06 14:53:30
322
原创 android pdf框架-14,精简lib,生成aar
现在基于谷歌购买的pdf解析库的更多一些. 著名的就是 AndroidPdfViewer. 因为之前分析过AndroidPdfViewer的源码,java部分,要去修改它比较困难,尤其offset的计算.所以现在有了这个库,按page去分页的.设计上要好一些.如果要省体积,可以使用系统的pdfrender,但是解码部分需要大改,现在的解码它先缓存page,可是系统api不允许,当前页面未关闭,就去加载下一页就崩溃.做完完整的app后,想做一个lib,像pdfium这样的,外部可以直接集成的库。
2025-01-07 13:54:29
343
原创 exoplayer的使用-7,手势优化
代码修改的并不多,从原来的onTouch修改为GestureDetector.相比之前的版本要好的多.toushslop可以不除以2.换了之后,长按的时间就会长一些,确定性要高才触发,之前长按触发会更快一点.Gesture手势类都给我们处理好了,双击,点击,滚动这些.所以打算用这个优化一下.效果好多了.从确定是横向滚动,还是垂直滚动,然后设置是音量还是进度,亮度开始,拖动一定距离才设置状态.第一次按下,然后拖动,产生的变化太大,严重不符合预期.touch在一个方法里面,从代码的角度看,不便于维护.
2025-01-05 20:17:47
143
原创 试用kotlin multiplatform
多平台的框架不少,flutter,rust,每一个都是优点明显,缺点也明显.flutter的桌面端控件少,质量不一.dart语言丑陋又慢.我不喜欢它.rust,桌面gui不成熟,成熟一些的slint还是授权和qt一样,同一个团队部分成员做的.移动端更不用说了.难有大企业在支持tarui,主要是桌面,可是也基于webview,试用了一下体验不好.lua,支持多端,koreader是比较有名的,剩下估计用的不是太多,移动端的体验我觉得一般.本身也没有一个团队去推动多平台这事.
2025-01-05 18:52:37
1240
原创 android pdf框架-13,涂鸦,笔记
剩下绘制这些代码不变.key简化了,因为涂鸦在一个图片上可能会产生很多点,尤其不是画直线,是画曲线,点的数量比较可观,尽量减少整个点的存储量.画一笔可能几十个点.原作者是保存在图片上,我想在pdf上画,我不想保存在图片上面,所以我保存在json的串里面,可以随时恢复.因为我不想编辑pdf,pdf是一个成品,不建议编辑.要站在牛人的肩膀上,这是做人做事的非常重要的法则.只要合适,合道德,我们应该参考别人的代码.程序员是这世上最善良的人群,写好文档,就怕别人看不懂.这里增加了个方法,点也增加了两个.
2024-08-07 21:00:03
512
原创 android pdf框架-12,k2pdfopt
至于渲染后的图片,是直接显示,还是先存文件,生成新的pdf,都可以,直接显示的话,考虑到机器的性能,并不是一个很好的效果.像这样的一张图片,时间在600多毫秒,而解析pdf的图片,mupdf10毫秒足够,滚动的效果可想而知了.在使用中,发现,对于一些程序较长的行,或者公式,它的截取就没有那么智能了,毕竟它是按行处理的,一个程序的pdf书,通常一个方法很长,分割后不容易看.但是对于其它的pdf分割效果不错.官方提供多平台的app,可以将pdf进行分割,组合,重新生成pdf,适用不同的页面.
2024-07-26 08:46:25
649
原创 android pdf框架-10,相册浏览
在浏览目录时,长按菜单,出现相册功能.按时间倒序排列查看.与pdf一样,所有的照片默认是同一个宽.不像barteksc它们都是保留原始宽,这样滑动后,可能容易内容滑出去了.这不是一个阅读器的好的体验方式.因为中间有一张特别宽的图片,会导致内容经常滑出去.这段代码,处理了超长图片,比如全景图片,进行缩放,因为在实际使用过程,如果不处理,会出现3000*500这样的图片,或者更大,导致内存溢出崩溃,draw时会有异常出现.所以针对 1080宽高作了一次缩放.图片太大,滚动起来也很慢,主要还是draw的问题.
2024-03-28 15:08:11
1061
原创 android pdf框架-9,解码优化
mupdf不支持直接的多线程.multithread.c我也没看明白,android直接调用多线程就会莫名其妙的事,要么崩溃,要么渲染出的页面不对.pdfium倒是可以直接多线程.但是解码速度要慢不少.
2024-03-19 17:21:44
1299
原创 android pdf框架-7,白边切割
图片的切边操作有时是比较有用的.看着舒服多了,页面间的空白如果比较大的图片在显示上,需要缩放,缩放后通常滚动会有偏移.这里先说算法思路.
2024-03-10 19:05:40
837
1
原创 android pdf框架-4,分析barteksc/PdfiumAndroid源码1
barteksc/PdfiumAndroid 这个源码被,引用的次数是比较高的,flutter的几个pdf库也是引用它.它使用福昕的开源sdk.福昕阅读器我早期的时候用,交互一般,渲染也不如mupdf,有些pdf中文显示不了,体积小点.checkLinkTapped处理的是页面点击.点击是调用了sdk的mapRectToDevice,这个操作是在jni处理的,外部传入点击的位置,返回的是LinkTapEvent,同样包含uri或目标页。
2024-02-24 10:09:45
1467
1
原创 android pdf框架-4,分析vudroid源码1
上文基于recyclerview修改,没有自定义layoutmanager,其实并不是一个好的阅读器,缩放功能有限,放大了容易内存溢出.本文,从修改vudroid源码来完成一个阅读器.它是基于view系统的相对完整的功能代码没有那么抽象,简洁容易修改功能没有完善,有修改空间可以容易做一个sdk对外提供原作者ebookdroid更好,基于opengl实现的,修改更麻烦,代码非常抽象.已经是一个完整的项目,各项功能都完善了,也没有修改的必要.
2024-02-23 21:09:38
1349
原创 android pdf框架-3,基于recyclerview修改
recyclerview的滑动并不是像ios那样,有很好的惯性,针对此,从ebookdroid中拿了flinger,因为recyclerview不能直接修改scroller,所以只有修改源码了,换了包名,避免冲突.先找到点击的view,然后得到它与屏幕偏移量,找到偏移量,可以得到它在页面上的偏移量,通过缩放因子,得到最后在页面上的点击区域.点击区域确定后,去查看页面上有没有对应区域的链接,链接目前支持url与目标页码两种。点击上半页,向下滚动,点击下半页,向上滚动.点击中间区域,显示当前的页码.
2024-02-18 10:00:54
1502
原创 android pdf框架-3,对开源库的探究1
之前的文章,分享了几个开源的库,如果要作一个完善的pdf库,需要的工作比较多,除了阅读功能,还有文件浏览器,历史记录,标注等一系列的事.有些场景则不需要这些,比如很多app会嵌入一个pdf阅读器,常见的是股票软件,它的财报是pdf的,这时只要展示出来,能滚动,缩放就足够,甚至可以不需要大纲导航,跳转到某一页.当然也不需要曝光,背景,切割这些功能.pdfiumandroid相关的库因为谷歌收购的原因,变的人尽皆知,原开始阅读器的作者不维护,可能因为工作关系,时间关系.但从它的派生出来的库非常多
2024-02-18 09:31:58
1383
原创 android tv开发-1,leanback替代品
leanback虽然可以简化开发流程,但国内好多设计与它不符合.有没有替代品可以用呢。
2024-02-04 15:41:22
1131
1
原创 android tv开发-1,leanback 2
去设置选中的菜单项,这是父类的方法,这就触发右侧的内容变化了,还需要在菜单的监听器中处理。到这,leanback的主要页面与功能就差不多了.一个简单的app也搞定了.就差详情页与播放页,这个在官方示例中有,而且恐怕国内的样式很难复用它。继承 MultiGridFragment就可以了,这个类它会有两个presenter,一个是左边的菜单,一个是右侧的内容.这个页面样式都是相对固定的,上部是搜索条,左侧是语音图标,中间搜索框,右边是搜索按钮,当然可以自己加,就是自定义了.把焦点聚集到结果上.
2024-02-03 20:06:30
1431
原创 android tv开发-1,leanback
首先,对于视频列表样式,里面用到了imagecard,如果不设置固定的高度,遇到中文,会有更高概率的焦点移动造成的高度变化.这时只要把整个view的高宽设置固定大小,或者运行时去修正就可以了.无法通过wrap的方式,尤其在第二行标题要时不时显示,隐藏的情况下,直接导致页面变形.对于国外市场,并不喜欢各种各样的表现,它们更注重内在,所以ui,动画长一样,没什么问题,leanback的设计本身也是不错的效果.但这套东西,对我们国内的开发者来说就比较痛苦了,基本没有人遵守.
2024-02-03 18:40:53
1541
compose pdf示例.里面的repository.zip 解压到.m2下面,作为本地仓库引用
2025-02-18
一个基于vudroid+mupdf的pdf阅读器
2024-02-19
mupdf 1.24版本编译的aar,64位
2024-02-18
Effective.Java.2nd.Edition.May.2008.3000th
2008-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅