自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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源码查看记录 二

平移,缩放功能分析。

2025-04-09 11:18:38 892

原创 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框架-11,查看图片

解析大tiff,png并显示

2024-07-06 14:33:42 898

原创 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框架-8,图片缓存

需要string作缓存key,能读取,且能根据容量把最早未访问的清除出缓存队列.

2024-03-13 11:52:49 583 1

原创 android pdf框架-7,白边切割

图片的切边操作有时是比较有用的.看着舒服多了,页面间的空白如果比较大的图片在显示上,需要缩放,缩放后通常滚动会有偏移.这里先说算法思路.

2024-03-10 19:05:40 699 1

原创 android pdf框架-6,文本生成pdf

前文介绍如何使用图片生成pdf,这里介绍如何使用文本生成pdf。

2024-03-08 09:37:46 813

原创 android pdf框架-5,生成pdf

前面的文章都是如何展示pdf,这篇关于如何生成pdf文件.

2024-03-08 09:21:35 1089

原创 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源码2

继续分析源码。

2024-02-23 21:59:25 1390

原创 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下面,作为本地仓库引用

compose pdf示例.里面的repository.zip 解压到.m2下面,作为本地仓库引用

2025-02-18

一个基于vudroid+mupdf的pdf阅读器

一个基于vudroid+mupdf的pdf阅读器. 在vudroid的基础上,使用了mupdf1.24版本的so,依赖的aar在https://download.youkuaiyun.com/download/archko/88845564 修正了阅读器的bug 支持epub,mobi格式. 添加了水平滚动. 优化的滚动的流畅度与惯性

2024-02-19

mupdf 1.24版本编译的aar,64位

基于mupdf,1.24编译的,只包含64位,修改了reflow功能,添加文本导出时 带图片与样式. 创建用户下的根目录/Users/xxx/.m2/repository/com/artifex/mupdf/mupdf-fitz/1.0-SNAPSHOT xxx是你的用户目录,压缩包解压,当然可以自定义,那么引用时自己添加就好. 默认目录引用是gradle里面配置mavenLocal(),自定义的自己加路径,然后app中 api "com.artifex.mupdf:mupdf-fitz:1.0-SNAPSHOT" 与官方的差别在于修改了Page.java,添加了 public native byte[] textAsHtml2(String options); public native byte[] textAsXHtml(String options); public native byte[] textAsText(String options); 参数是"preserve-whitespace,inhibit-spaces,preserve-images"

2024-02-18

java 面试解惑系列

里面讲述了JAVA面试过程中常提到的一些问题,适合新手了解掌握的。如string,线程,对象的继承,方法重载等。

2008-12-13

Effective.Java.2nd.Edition.May.2008.3000th

传说中的JAVA书籍的圣经就是这个了。是一本很好的JAVA书籍,但需要一定的JAVA基础,不太适合新手,

2008-12-13

spring开发

一本关于SPRING开发的书

2007-12-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除