- 博客(79)
- 资源 (3)
- 收藏
- 关注
原创 compose map 源码解析
telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view.最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原理.这是源码.
2025-04-12 20:59:46
979
原创 telophoto源码查看记录 三
它的tile,先根据固定的大小一块一块排列,然后剩下的如果不是一个tile的大小,会把它与前面的合并成为一个tile.每一个tile,除了自己的大小,还有它对应的采样,因为缩放后这些采样有可能不一样.创建缓存,加载或卸载tile.这里是监控viewportTiles的变化,这是view的tile.除了图片会被划分,先将view划分.当图还没加载的时候,需要去占着位置,所以它是必要的.zoomable的流程,事件分析过了,它作用于任何view,zoomable-image主要是针对图片的.
2025-04-09 15:07:15
1029
原创 telophoto源码查看记录
compose的图片查看器不少,telophoto功能完善,文档详细,支持image外的控件缩放.它支持多平台.打算从它的源码入手,然后作一个自定义的view.
2025-04-08 09:19:56
642
原创 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
866
原创 compose multiplatform写一个简单的阅读器
compose multiplatform写一个简单的pdf阅读器,使用mupdf解析pdf.
2025-02-17 18:00:20
696
原创 SubsamplingScaleImageView适配tv
这个方法是处理平移的,SubsamplingScaleImageView它的特点是,先计算中心点,然后再通过对中心点的偏移操作.默认的时候,缩放值不理想.那么在开始时应该先设置一个缩放值.SubsamplingScaleImageView如何适配tv的按键操作的,我看了一下,几乎都是转发同一篇,试用一下效果我就不说了,要是行就没有这篇文章了.这个不复杂,按下时,缩放*1.2,直到超过了最大的值2,然后复位.我这里测试的是默认是0.108,一张超大图片长条型的.清明上河图.普通的应该不会差很多.
2025-02-06 14:53:30
237
原创 android pdf框架-14,精简lib,生成aar
现在基于谷歌购买的pdf解析库的更多一些. 著名的就是 AndroidPdfViewer. 因为之前分析过AndroidPdfViewer的源码,java部分,要去修改它比较困难,尤其offset的计算.所以现在有了这个库,按page去分页的.设计上要好一些.如果要省体积,可以使用系统的pdfrender,但是解码部分需要大改,现在的解码它先缓存page,可是系统api不允许,当前页面未关闭,就去加载下一页就崩溃.做完完整的app后,想做一个lib,像pdfium这样的,外部可以直接集成的库。
2025-01-07 13:54:29
262
原创 exoplayer的使用-7,手势优化
代码修改的并不多,从原来的onTouch修改为GestureDetector.相比之前的版本要好的多.toushslop可以不除以2.换了之后,长按的时间就会长一些,确定性要高才触发,之前长按触发会更快一点.Gesture手势类都给我们处理好了,双击,点击,滚动这些.所以打算用这个优化一下.效果好多了.从确定是横向滚动,还是垂直滚动,然后设置是音量还是进度,亮度开始,拖动一定距离才设置状态.第一次按下,然后拖动,产生的变化太大,严重不符合预期.touch在一个方法里面,从代码的角度看,不便于维护.
2025-01-05 20:17:47
78
原创 试用kotlin multiplatform
多平台的框架不少,flutter,rust,每一个都是优点明显,缺点也明显.flutter的桌面端控件少,质量不一.dart语言丑陋又慢.我不喜欢它.rust,桌面gui不成熟,成熟一些的slint还是授权和qt一样,同一个团队部分成员做的.移动端更不用说了.难有大企业在支持tarui,主要是桌面,可是也基于webview,试用了一下体验不好.lua,支持多端,koreader是比较有名的,剩下估计用的不是太多,移动端的体验我觉得一般.本身也没有一个团队去推动多平台这事.
2025-01-05 18:52:37
1050
原创 android pdf框架-13,涂鸦,笔记
剩下绘制这些代码不变.key简化了,因为涂鸦在一个图片上可能会产生很多点,尤其不是画直线,是画曲线,点的数量比较可观,尽量减少整个点的存储量.画一笔可能几十个点.原作者是保存在图片上,我想在pdf上画,我不想保存在图片上面,所以我保存在json的串里面,可以随时恢复.因为我不想编辑pdf,pdf是一个成品,不建议编辑.要站在牛人的肩膀上,这是做人做事的非常重要的法则.只要合适,合道德,我们应该参考别人的代码.程序员是这世上最善良的人群,写好文档,就怕别人看不懂.这里增加了个方法,点也增加了两个.
2024-08-07 21:00:03
404
原创 android pdf框架-12,k2pdfopt
至于渲染后的图片,是直接显示,还是先存文件,生成新的pdf,都可以,直接显示的话,考虑到机器的性能,并不是一个很好的效果.像这样的一张图片,时间在600多毫秒,而解析pdf的图片,mupdf10毫秒足够,滚动的效果可想而知了.在使用中,发现,对于一些程序较长的行,或者公式,它的截取就没有那么智能了,毕竟它是按行处理的,一个程序的pdf书,通常一个方法很长,分割后不容易看.但是对于其它的pdf分割效果不错.官方提供多平台的app,可以将pdf进行分割,组合,重新生成pdf,适用不同的页面.
2024-07-26 08:46:25
518
原创 android pdf框架-10,相册浏览
在浏览目录时,长按菜单,出现相册功能.按时间倒序排列查看.与pdf一样,所有的照片默认是同一个宽.不像barteksc它们都是保留原始宽,这样滑动后,可能容易内容滑出去了.这不是一个阅读器的好的体验方式.因为中间有一张特别宽的图片,会导致内容经常滑出去.这段代码,处理了超长图片,比如全景图片,进行缩放,因为在实际使用过程,如果不处理,会出现3000*500这样的图片,或者更大,导致内存溢出崩溃,draw时会有异常出现.所以针对 1080宽高作了一次缩放.图片太大,滚动起来也很慢,主要还是draw的问题.
2024-03-28 15:08:11
1016
原创 android pdf框架-9,解码优化
mupdf不支持直接的多线程.multithread.c我也没看明白,android直接调用多线程就会莫名其妙的事,要么崩溃,要么渲染出的页面不对.pdfium倒是可以直接多线程.但是解码速度要慢不少.
2024-03-19 17:21:44
1179
原创 android pdf框架-7,白边切割
图片的切边操作有时是比较有用的.看着舒服多了,页面间的空白如果比较大的图片在显示上,需要缩放,缩放后通常滚动会有偏移.这里先说算法思路.
2024-03-10 19:05:40
699
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
1251
1
原创 android pdf框架-4,分析vudroid源码1
上文基于recyclerview修改,没有自定义layoutmanager,其实并不是一个好的阅读器,缩放功能有限,放大了容易内存溢出.本文,从修改vudroid源码来完成一个阅读器.它是基于view系统的相对完整的功能代码没有那么抽象,简洁容易修改功能没有完善,有修改空间可以容易做一个sdk对外提供原作者ebookdroid更好,基于opengl实现的,修改更麻烦,代码非常抽象.已经是一个完整的项目,各项功能都完善了,也没有修改的必要.
2024-02-23 21:09:38
1259
原创 android pdf框架-3,基于recyclerview修改
recyclerview的滑动并不是像ios那样,有很好的惯性,针对此,从ebookdroid中拿了flinger,因为recyclerview不能直接修改scroller,所以只有修改源码了,换了包名,避免冲突.先找到点击的view,然后得到它与屏幕偏移量,找到偏移量,可以得到它在页面上的偏移量,通过缩放因子,得到最后在页面上的点击区域.点击区域确定后,去查看页面上有没有对应区域的链接,链接目前支持url与目标页码两种。点击上半页,向下滚动,点击下半页,向上滚动.点击中间区域,显示当前的页码.
2024-02-18 10:00:54
1440
原创 android pdf框架-3,对开源库的探究1
之前的文章,分享了几个开源的库,如果要作一个完善的pdf库,需要的工作比较多,除了阅读功能,还有文件浏览器,历史记录,标注等一系列的事.有些场景则不需要这些,比如很多app会嵌入一个pdf阅读器,常见的是股票软件,它的财报是pdf的,这时只要展示出来,能滚动,缩放就足够,甚至可以不需要大纲导航,跳转到某一页.当然也不需要曝光,背景,切割这些功能.pdfiumandroid相关的库因为谷歌收购的原因,变的人尽皆知,原开始阅读器的作者不维护,可能因为工作关系,时间关系.但从它的派生出来的库非常多
2024-02-18 09:31:58
1231
原创 android tv开发-1,leanback替代品
leanback虽然可以简化开发流程,但国内好多设计与它不符合.有没有替代品可以用呢。
2024-02-04 15:41:22
1049
1
原创 android tv开发-1,leanback 2
去设置选中的菜单项,这是父类的方法,这就触发右侧的内容变化了,还需要在菜单的监听器中处理。到这,leanback的主要页面与功能就差不多了.一个简单的app也搞定了.就差详情页与播放页,这个在官方示例中有,而且恐怕国内的样式很难复用它。继承 MultiGridFragment就可以了,这个类它会有两个presenter,一个是左边的菜单,一个是右侧的内容.这个页面样式都是相对固定的,上部是搜索条,左侧是语音图标,中间搜索框,右边是搜索按钮,当然可以自己加,就是自定义了.把焦点聚集到结果上.
2024-02-03 20:06:30
1339
原创 android tv开发-1,leanback
首先,对于视频列表样式,里面用到了imagecard,如果不设置固定的高度,遇到中文,会有更高概率的焦点移动造成的高度变化.这时只要把整个view的高宽设置固定大小,或者运行时去修正就可以了.无法通过wrap的方式,尤其在第二行标题要时不时显示,隐藏的情况下,直接导致页面变形.对于国外市场,并不喜欢各种各样的表现,它们更注重内在,所以ui,动画长一样,没什么问题,leanback的设计本身也是不错的效果.但这套东西,对我们国内的开发者来说就比较痛苦了,基本没有人遵守.
2024-02-03 18:40:53
1462
原创 dio 断点续传的问题
这是从dio源码中找到的下载方法,去除了删除文件,修改write为append,也就是说,原来的方法是可以从头开始下载,但中间不能停,停了会失败.但现在文件下载了多少,需要自己去保证.否则下载的文件是从现有的追加,有可能导致文件不正确.对于取消,它会抛出异常来,可以捕获时得到是取消的原因.这里设置了重试,避免一些网络抖动导致的下载失败.canceltoken由外部传入就可以了,要取消的时候调用cancel就能取消了.这是传的参数 processed是已经下载过的字节,-后面可以跟上总的. 也可以不跟.
2024-01-26 10:53:09
512
2
原创 google oauth认证与使用youtube的api-4,上市场
iframe的播放器,底部是谷歌的,所以做两个bar,把顶与底全部盖住,默认参数 就不显示controls了,传0.然后进入播放时,就把底部的栏显示出来,当播放状态变了播放中,就隐藏,这要判断是不是第一次初始化,因为有可能播放中点击了暂停,同样要显示所有的信息栏.一个列表加载,要有加载中的loading,失败时要显示失败的样式,一点不能少.任何一个可见的可点击的控件,都要通过上中下左右这简单的遥控能导航过去的.谷歌的模拟器,我m2的电脑,只能竖屏,头都快搞歪了.里面的遥控就是官方文档里面一样的.
2024-01-25 21:23:51
474
原创 google oauth认证与使用youtube的api-3,上市场
主要是进入它的认证中心,把api的使用限制添加上,比如android/ios这些,然后最好把api也选上就可以了.谷歌市场上包,会检测api密钥,官方的文档有说明,如果你不限制密钥的使用,不让过。这个页面给出相应的操作提示了.操作完就可以了.
2023-12-26 11:41:08
496
原创 google oauth认证与使用youtube的api-2,tv版本
刷新token就是上面api中的getRefreshToken接口.传的参数oauth2都一样.大概就是private static final String REFRESH_TOKEN = "{\"code\":\"%s\",\"client_id\":\"%s\",\"client_secret\":\"%s\",\"grant_type\":\"%s\"}";但是,认证过程,发现了,没有得到用户信息,只得到了邮箱,是在idtoken里面的.手机是没有client_secret,但web与tv是有的.
2023-12-24 10:17:12
1639
原创 google oauth认证与使用youtube的api
最后会发现,这些是无效的,有些api在target=30已经不行了,现在谷歌的市场是要求33,所以这些都不行,没有测试过,目标机器上的Play service升级到最高版本会如何,但你无法要求客户去升级的.所以这些办法放弃.谷歌在官方的文档里面提到oauth认证的方案.开始感觉到惊喜,以前做新浪微博的时候,也是oauth2认证,结果,文档里面写到,webview已经不支持这种方式了,url拼完,它也不给你加载.
2023-12-18 17:41:32
2130
原创 exoplayer的使用-6,播放器的选择
除了exo只是android平台的,其它是多平台的,如果要做统一播放器,vlc是最佳选择.如果分开来不考虑体积影响,ios平台vlc>mpv>ijk. 在android平台exo>vlc>mpc>ijk。mpv与ijk类似,对普通视频支持不错,但对高码率的视频支持不好,启动慢,seek慢.内置字幕,音频这些支持可以.轨道的显示缺少国际化,比较一般.需要一个能播放蓝光的,高码率的播放器,在使用现成的播放器的基础上,可选的有几个,exoplayer,vlc,ijk,mpv.
2023-09-28 16:43:05
915
原创 exoplayer的使用-5,字幕(内,外)
/轨道类型,如果-2:选择轨道,-1:关闭轨道/*** 这个是渲染器索引,音频,字幕都是渲染器,当前不用它*//*** 这个是音频的索引,外部传来的值trackId应该是对应这个值的*///这是exo用的if (null!//初始化时需要设置一下.//这是vlc用的!} else {"%s%s",postfix),} else {null,0,0,轨道中,字幕与音频是一样地.
2023-09-21 18:48:01
1649
原创 exoplayer的使用-4,手势,事件监听等
/去除字幕背景nullapp:use_controller="false" 布局里面把原来的控制器去了,换上自己的进度条,这些.
2023-09-18 17:47:59
627
原创 exoplayer的使用-3,播放功能
已经联通与flutter后,就开始进入播放器的播放功能了.当前exoplayer是2.19.1,然后已经正式进入了android,androidx.media3,估计原来的mediaplayer就要废除了.exo全部被标记过时了,不影响使用.由于ac3这些音频扩展的作者没有更新,自己编译又麻烦,暂时我不更新到media3.
2023-09-18 16:31:45
581
原创 ffmpeg 开发第一例
xcode的开发实在不习惯,用的是clion,cmake,vscode.下一篇,clion创建项目,导入ffmpeg依赖。在作者的示例上,修正了在ffmpeg6.0.1上运行,有些方法过时了.没有其它的修改.
2023-09-16 17:08:18
489
原创 exoplayer的使用-2,与flutter相互通信
而我做的项目,flutter是单引擎的,也没有用到flutterboost.如果从flutter到native的播放页,然后这时想在native调用flutter,就要想一想办法了.但要做一个播放器,其实并不是这样容易地,因为flutter的多引擎会有许多 问题.如果是单引擎,最好是使用flutterboost这样的框架,把事情处理完了.另一个问题是flutter端的内置字幕显示不了,也不打算再继续探讨了,换成native实现播放器.由于主项目是flutter的,所以涉及到了相互通信.
2023-08-01 16:29:22
798
原创 android pdf框架-2,编译mupdf
然后运行:./gradlew publishMupdfPublicationToMavenLocal 就可以发布了.发完在自己工程最外的build.gradle加入mavenLocal()仓库,就可以引用到了,加两处.其它文件如gradle.properties,gradle目录,gradlew从别的工程弄过来就可以了.建一个mupdf_c目录,名字自己取,在里面git下载mupdf源码,把目录修改为libmupdf。因为mupdf编译的体积不小,之前也发过编译的文章,现在更新一下.
2023-07-30 13:25:41
1362
原创 exoplayer的使用-1
exoplayer是谷歌出品的,不同版本的api变化不少.我用的是2.18.7版本的.因为flutter插件用到这个播放器也是这个版本的.基于exoplayer的flutter播放器有video_player,betterplayer,这两个比较有名的.先从flutter播放器说起.如果只是做一个播放示例,这些播放器功能就满足了.通常自己添加亮度,音量的手势控制就差不多了.播放功能是基础功能,但一般商业产品只是基础功能是不够的.比如字幕功能,杜比音效,5.1,7.1声道这些也很重要的.
2023-07-09 21:22:58
1413
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关注的人