自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (3)
  • 收藏
  • 关注

原创 android pdf框架-10,相册浏览

在浏览目录时,长按菜单,出现相册功能.按时间倒序排列查看.与pdf一样,所有的照片默认是同一个宽.不像barteksc它们都是保留原始宽,这样滑动后,可能容易内容滑出去了.这不是一个阅读器的好的体验方式.因为中间有一张特别宽的图片,会导致内容经常滑出去.这段代码,处理了超长图片,比如全景图片,进行缩放,因为在实际使用过程,如果不处理,会出现3000*500这样的图片,或者更大,导致内存溢出崩溃,draw时会有异常出现.所以针对 1080宽高作了一次缩放.图片太大,滚动起来也很慢,主要还是draw的问题.

2024-03-28 15:08:11 912

原创 android pdf框架-9,解码优化

mupdf不支持直接的多线程.multithread.c我也没看明白,android直接调用多线程就会莫名其妙的事,要么崩溃,要么渲染出的页面不对.pdfium倒是可以直接多线程.但是解码速度要慢不少.

2024-03-19 17:21:44 973 1

原创 android pdf框架-8,图片缓存

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

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

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

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

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

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

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

2024-03-08 09:37:46 690

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

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

2024-03-08 09:21:35 519

原创 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 1033 1

原创 android pdf框架-4,分析vudroid源码2

继续分析源码。

2024-02-23 21:59:25 1290

原创 android pdf框架-4,分析vudroid源码1

上文基于recyclerview修改,没有自定义layoutmanager,其实并不是一个好的阅读器,缩放功能有限,放大了容易内存溢出.本文,从修改vudroid源码来完成一个阅读器.它是基于view系统的相对完整的功能代码没有那么抽象,简洁容易修改功能没有完善,有修改空间可以容易做一个sdk对外提供原作者ebookdroid更好,基于opengl实现的,修改更麻烦,代码非常抽象.已经是一个完整的项目,各项功能都完善了,也没有修改的必要.

2024-02-23 21:09:38 1119

原创 android pdf框架-3,基于recyclerview修改

recyclerview的滑动并不是像ios那样,有很好的惯性,针对此,从ebookdroid中拿了flinger,因为recyclerview不能直接修改scroller,所以只有修改源码了,换了包名,避免冲突.先找到点击的view,然后得到它与屏幕偏移量,找到偏移量,可以得到它在页面上的偏移量,通过缩放因子,得到最后在页面上的点击区域.点击区域确定后,去查看页面上有没有对应区域的链接,链接目前支持url与目标页码两种。点击上半页,向下滚动,点击下半页,向上滚动.点击中间区域,显示当前的页码.

2024-02-18 10:00:54 1314

原创 android pdf框架-3,对开源库的探究1

之前的文章,分享了几个开源的库,如果要作一个完善的pdf库,需要的工作比较多,除了阅读功能,还有文件浏览器,历史记录,标注等一系列的事.有些场景则不需要这些,比如很多app会嵌入一个pdf阅读器,常见的是股票软件,它的财报是pdf的,这时只要展示出来,能滚动,缩放就足够,甚至可以不需要大纲导航,跳转到某一页.当然也不需要曝光,背景,切割这些功能.pdfiumandroid相关的库因为谷歌收购的原因,变的人尽皆知,原开始阅读器的作者不维护,可能因为工作关系,时间关系.但从它的派生出来的库非常多

2024-02-18 09:31:58 1100

原创 android tv开发-1,leanback替代品

leanback虽然可以简化开发流程,但国内好多设计与它不符合.有没有替代品可以用呢。

2024-02-04 15:41:22 886 1

原创 android tv开发-1,leanback 2

去设置选中的菜单项,这是父类的方法,这就触发右侧的内容变化了,还需要在菜单的监听器中处理。到这,leanback的主要页面与功能就差不多了.一个简单的app也搞定了.就差详情页与播放页,这个在官方示例中有,而且恐怕国内的样式很难复用它。继承 MultiGridFragment就可以了,这个类它会有两个presenter,一个是左边的菜单,一个是右侧的内容.这个页面样式都是相对固定的,上部是搜索条,左侧是语音图标,中间搜索框,右边是搜索按钮,当然可以自己加,就是自定义了.把焦点聚集到结果上.

2024-02-03 20:06:30 1121

原创 android tv开发-1,leanback

首先,对于视频列表样式,里面用到了imagecard,如果不设置固定的高度,遇到中文,会有更高概率的焦点移动造成的高度变化.这时只要把整个view的高宽设置固定大小,或者运行时去修正就可以了.无法通过wrap的方式,尤其在第二行标题要时不时显示,隐藏的情况下,直接导致页面变形.对于国外市场,并不喜欢各种各样的表现,它们更注重内在,所以ui,动画长一样,没什么问题,leanback的设计本身也是不错的效果.但这套东西,对我们国内的开发者来说就比较痛苦了,基本没有人遵守.

2024-02-03 18:40:53 1226

原创 dio 断点续传的问题

这是从dio源码中找到的下载方法,去除了删除文件,修改write为append,也就是说,原来的方法是可以从头开始下载,但中间不能停,停了会失败.但现在文件下载了多少,需要自己去保证.否则下载的文件是从现有的追加,有可能导致文件不正确.对于取消,它会抛出异常来,可以捕获时得到是取消的原因.这里设置了重试,避免一些网络抖动导致的下载失败.canceltoken由外部传入就可以了,要取消的时候调用cancel就能取消了.这是传的参数 processed是已经下载过的字节,-后面可以跟上总的. 也可以不跟.

2024-01-26 10:53:09 209 2

原创 google oauth认证与使用youtube的api-4,上市场

iframe的播放器,底部是谷歌的,所以做两个bar,把顶与底全部盖住,默认参数 就不显示controls了,传0.然后进入播放时,就把底部的栏显示出来,当播放状态变了播放中,就隐藏,这要判断是不是第一次初始化,因为有可能播放中点击了暂停,同样要显示所有的信息栏.一个列表加载,要有加载中的loading,失败时要显示失败的样式,一点不能少.任何一个可见的可点击的控件,都要通过上中下左右这简单的遥控能导航过去的.谷歌的模拟器,我m2的电脑,只能竖屏,头都快搞歪了.里面的遥控就是官方文档里面一样的.

2024-01-25 21:23:51 282

原创 google oauth认证与使用youtube的api-3,上市场

主要是进入它的认证中心,把api的使用限制添加上,比如android/ios这些,然后最好把api也选上就可以了.谷歌市场上包,会检测api密钥,官方的文档有说明,如果你不限制密钥的使用,不让过。这个页面给出相应的操作提示了.操作完就可以了.

2023-12-26 11:41:08 380

原创 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 977

原创 google oauth认证与使用youtube的api

最后会发现,这些是无效的,有些api在target=30已经不行了,现在谷歌的市场是要求33,所以这些都不行,没有测试过,目标机器上的Play service升级到最高版本会如何,但你无法要求客户去升级的.所以这些办法放弃.谷歌在官方的文档里面提到oauth认证的方案.开始感觉到惊喜,以前做新浪微博的时候,也是oauth2认证,结果,文档里面写到,webview已经不支持这种方式了,url拼完,它也不给你加载.

2023-12-18 17:41:32 1016

原创 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 341

原创 exoplayer的使用-5,字幕(内,外)

/轨道类型,如果-2:选择轨道,-1:关闭轨道/*** 这个是渲染器索引,音频,字幕都是渲染器,当前不用它*//*** 这个是音频的索引,外部传来的值trackId应该是对应这个值的*///这是exo用的if (null!//初始化时需要设置一下.//这是vlc用的!} else {"%s%s",postfix),} else {null,0,0,轨道中,字幕与音频是一样地.

2023-09-21 18:48:01 649

原创 exoplayer的使用-4,手势,事件监听等

/去除字幕背景nullapp:use_controller="false" 布局里面把原来的控制器去了,换上自己的进度条,这些.

2023-09-18 17:47:59 315

原创 exoplayer的使用-3,播放功能

已经联通与flutter后,就开始进入播放器的播放功能了.当前exoplayer是2.19.1,然后已经正式进入了android,androidx.media3,估计原来的mediaplayer就要废除了.exo全部被标记过时了,不影响使用.由于ac3这些音频扩展的作者没有更新,自己编译又麻烦,暂时我不更新到media3.

2023-09-18 16:31:45 303

原创 ffmpeg 开发第一例

xcode的开发实在不习惯,用的是clion,cmake,vscode.下一篇,clion创建项目,导入ffmpeg依赖。在作者的示例上,修正了在ffmpeg6.0.1上运行,有些方法过时了.没有其它的修改.

2023-09-16 17:08:18 454

原创 exoplayer的使用-2,与flutter相互通信

而我做的项目,flutter是单引擎的,也没有用到flutterboost.如果从flutter到native的播放页,然后这时想在native调用flutter,就要想一想办法了.但要做一个播放器,其实并不是这样容易地,因为flutter的多引擎会有许多 问题.如果是单引擎,最好是使用flutterboost这样的框架,把事情处理完了.另一个问题是flutter端的内置字幕显示不了,也不打算再继续探讨了,换成native实现播放器.由于主项目是flutter的,所以涉及到了相互通信.

2023-08-01 16:29:22 689

原创 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 1103

原创 exoplayer的使用-1

exoplayer是谷歌出品的,不同版本的api变化不少.我用的是2.18.7版本的.因为flutter插件用到这个播放器也是这个版本的.基于exoplayer的flutter播放器有video_player,betterplayer,这两个比较有名的.先从flutter播放器说起.如果只是做一个播放示例,这些播放器功能就满足了.通常自己添加亮度,音量的手势控制就差不多了.播放功能是基础功能,但一般商业产品只是基础功能是不够的.比如字幕功能,杜比音效,5.1,7.1声道这些也很重要的.

2023-07-09 21:22:58 1117

原创 exoplayer+ffmpeg

添加仓库repo.maven.apache.org,然后在gradle里面添加依赖就可以了.exoplayer-ffmpeg-extension/2.18.1+1。本来想手动编译一个ffmpeg的扩展,但试了好多版本,都不成功,后来发现有人上传了.事情就非常容易了.或者手动去下载它,直接依赖aar.

2023-06-21 14:27:23 729

原创 android pdf框架

pdf已经使用很普遍了,android上的好用的pdf工具也有不少,个人更经常是用于阅读,很少标记,所以有一个适合的阅读器对我来说非常重要了.自己写一个阅读器是不是太闲了,市面上有静读天下,ebookdroid都是非常优秀的阅读器,只不过对于来说,需求没匹配上,因为我读了几百上千本书,还有很多没有读的,需要一个好的文件浏览器,ebookdroid本来是很好的,但滚动上有问题,横竖切换有bug一直没有更新了.静读天下是基于pdfmaster,有些pdf的中文显示不了.

2023-05-08 17:21:35 1331 6

原创 asm操作字节码学习6:app整改插件

之前的几篇已经从asm介绍到bytex的实践,这篇介绍,开发插件,去应对app的整改相关的内容.在我之前的一篇文章:Android app权限整改_archko的专栏-CSDN博客权限整改中,重点是定位权限,当你的app已经检查过了,使用定位的权限了,又被整改退回来了,是不是觉得脑子不够用了?检测机构出问题了?当然不是.因为有其它地方,间接地使用了它.其它像相机,通讯录这些权限就不说了,不够特殊,今天说一说定位权限.手机系统中,有一项检查隐私保护->查看应用行为记录,里面记录着app访问了哪些

2021-10-03 10:33:23 131

原创 asm操作字节码学习5:移植插件

前面4篇文章,介绍了asm,bytex相关的知识.以实践为主.今天这一篇,介绍如何把didi booster移植过来.首先didi的booster也是一个非常优秀的框架.我造反bytex是因为它设计的更细致,兼容性更好.bytex提供的插件有几个,同时didi也提供了一些插件.所以我把booster的插件移植过来.booster的toast插件,解决7.0的异常.把这个插件移植过来.先把booster里面的booster-android-instrument-toast复制到项目目.

2021-09-25 18:58:15 202

原创 用python 抓取股票,看盘

本文介绍,如何用python抓取股票数据,展示在终端上.作为程序员,如果你一整天打开同花顺,雪球,富途这些app,容易让领导看到,但有时你就想看一看,怎么办呢?现有不少api可以使用的.比如新浪,腾讯,雪球,网易都有.经过对比,这里用腾讯的,因为其它只有代码,没有名字,看起来不方便.先来一段效果展示:iterm2上绿色没显示出来,所以换手率这里还是黑色的.vs code上正常.tencent_url="http://qt.gtimg.cn/q=" + getSymbol(Fals

2021-09-21 09:17:20 1876

原创 asm操作字节码学习4:bytex插件初探

第一篇只是介绍了bytex,及其相关的一些知识.本文将更详细地介绍,基于bytex项目开发插件,深入插件的源码经过前几篇文章的内容介绍,相信已经了解了asm的基本操作与bytex插件开发了.

2021-09-20 19:26:29 271

原创 asm操作字节码学习3:asm的主要api

asm操作字节码学习2:用asm操作一个类

2021-09-12 08:51:22 171

原创 asm操作字节码学习2:用asm操作一个类

asm就是用来操作字节码的,环境搭建与asm的基础知识,字节码知识了解以后,开始操作字节码吧.1.先来一个简单的类:public class MyClass { private int test; public void hello() { System.out.println("hello!"); }}要产生这样一个类的步骤:创建类,创建属性,创建方法,在方法中插入一个语句.fun createClz(): ByteArray {1.创建类

2021-09-04 14:20:23 144

原创 asm操作字节码学习1:bytex插件开发,环境搭建

bytex,由字节抖音团队开发,并开源,https://github.com/bytedance/ByteX官方文档说明如何插件开发.先下载源码,然后打开源码工程,新建一个分支,在此基础上去建立library,就可以了.这部分看文档就可以了.遇到的一些问题.1.插件开发完成后,如何运行.gradle_plugins在根目录会产生这个目录,下面存着你的插件编译结果.默认idea是不显示的,你ctrl+n搜索类这个快捷键输入这个名字就可以了.2.插件...

2021-08-29 09:07:31 200

原创 Android app权限整改

权限整改中,重点是定位权限,当你的app已经检查过了,使用定位的权限了,又被整改退回来了,是不是觉得脑子不够用了?检测机构出问题了?当然不是.因为有其它地方,间接地使用了它.其它像相机,通讯录这些权限就不说了,不够特殊,今天说一说定位权限.手机系统中,有一项检查隐私保护->查看应用行为记录,里面记录着app访问了哪些权限,你也许会很奇怪,我明明没有了定位操作,也没有地图为何还会访问定位权限?首先,要看文档:官方文档权限变更:https://developer.andro

2021-08-12 16:01:28 386

原创 让greendao支持group by

旧项目中使用的是greendao,但像group bydistinct这样的语法不支持。开始想的是.where(WhereCondition(), new WhereCondition.StringCondition(" GROUP BY uid")) 这样添加两个条件句。语法写错的情况下,发现它打印出日志:compiling error: select t._id .... from table_name where id>20 and group byuid 。于是我发现了..

2021-04-20 16:31:28 878

原创 fluter 使用百度地图

github上有一个百度地图的实现 xx_fluttify,他不只有百度地图,还有各种地图的实现,后来改收费了,高德的key没申请下来,我就下载了百度的lib。用地图没大问题,就是速度不咋地,platformview的原因。当我需要geo反查时出现问题了,这个库一直有回调,即使我已经把当前的widget关了,各种dispose,依然会有查询结果回调,这显然是内存泄露了。基于速度与内存的考虑,地图定位选址功能就不用它了。毕竟写一个拖动地图选址还是不难地。而且native的view速度快多了。遇

2020-08-14 19:22:03 545

原创 flutter 常见问题

1.pageview,遇到列表点击进入详情后回来,列表重新加载了.class _MovieListPageState extends State<MovieListPage>//重点: with AutomaticKeepAliveClientMixin@overridebool get wantKeepAlive => true;光这样还是不够地.需要在...

2020-04-27 21:17:51 706

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

一个基于vudroid+mupdf的pdf阅读器. 在vudroid的基础上,使用了mupdf1.24版本的so,依赖的aar在https://download.csdn.net/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关注的人

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