V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Girl66
V2EX  ›  程序员

请教各位帅哥: 安卓开发问题: TXT 电子书如何识别并记忆阅读的段落位置?

  •  
  •   Girl66 · 199 天前 · 3951 次点击
    这是一个创建于 199 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小妹开发了一个简单的 txt 文件阅读器, 原理很简单从一个 txt 文件读取文本显示在屏幕上, 屏幕上下滚动可以浏览该电子书文本, 请问: 如何识别并记忆阅读的段落位置? 比如我现在读到第二段第 3 行 我要记录这个位置 以便下次打开电子书直接跳到该位置 象书签一样, 请问如何实现 谢谢.

    小妹在此谢过各位帅哥...

    48 条回复    2021-11-04 14:01:34 +08:00
    2i2Re2PLMaDnghL
        1
    2i2Re2PLMaDnghL  
       199 天前   ❤️ 18
    > 如果你不 po 一张露奶照片出来,那你表明女性身份根本不能提供任何优势。

    你随便找个地方记录不就行了?直接找个地方存一个 json 得了。
    就是注意一点,第几段第几行这种是不稳定的,可能应该记录读到第几个字节。
    shintendo
        2
    shintendo  
       199 天前   ❤️ 3
    哥们,看了一眼你的提问记录,就差把我是女的四个加粗黑体字写在头像上了,大可不必
    lix7
        3
    lix7  
       199 天前   ❤️ 1
    只读的话,直接前后几十个字存下来,下次字符串匹配就行了
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       198 天前   ❤️ 10
    为了你好,请容我武断地指出,互联网黄金规则之一就是『网络上没有女性』。这条规则的意思和你想的不一样。

    现实中,人们喜欢你的女性身份。他们想要跟你嘿咻,他们会关注你、假装对你说的话感兴趣、认为你机智风趣。网络上,我们没机会跟你嘿咻,这代表你的『女性』优势荡然无存。你和我谈话时,并不会因为我的性欲而获得加分。

    当你的文章内出现『小妹我……』时,你是在祈求别人注意你。你强调自己是女生只是为了夺回女性的优势,因为没了女性优势,你的文章就只是篇无趣、愚蠢、空洞的垃圾。你忘了互联网黄金规则:网络上没有女性。

    规则的唯一例外,能让你在网络上重拾女性优势的例外,就是贴出你自己的露奶照。
    这对你来说是种侮辱和物化,但在网络上,你唯一能让大家对你激起兴趣的只有你的裸照。

    给因为文章太长而懒得看的人:不露奶就滚蛋。
    UglyFatOld
        5
    UglyFatOld  
       198 天前
    快看这里有个小妹,虽然还不知道真假,快去舔啊手动狗头
    GTim
        7
    GTim  
       198 天前
    一般都是滚动停止的时候记录章节编号和滚动的距离吧
    tankren
        8
    tankren  
       198 天前
    @Livid #1 #4 #6 这人怪怪的
    viberconnection
        9
    viberconnection  
       198 天前 via Android
    在網路的那一頭,沒有人知道對方是貓咪還是小狗。
    其實一些東西真的不重要啦。XD
    jeepc
        10
    jeepc  
       198 天前
    我讲一个思路:首先你要根据字体大小,得到每行的字数,然后计算文本的总行数。每次记录用户当前的行数,重新加载时,根据每行字数和当前行数载入对应文本。如果用户字体改变,需要重新计算每行字数以及换算出切换字体后用户当前行数。优化:1.在屏幕上方和下方预加载文本,这样滚动时候就比较流畅; 2.如果文本太大,要分段载入内存,用户的当前行数就变成第 x 页第几行。
    jeepc
        11
    jeepc  
       198 天前
    andyskaura
        12
    andyskaura  
       198 天前
    直接存读到第几个字不方便吗
    Kilerd
        13
    Kilerd  
       198 天前
    @2i2Re2PLMaDnghL 言语真让人恶心
    kujio
        14
    kujio  
       198 天前
    每次滚动或翻页就记录一次当前显示的第一的字的位置就行了啊
    Vegetable
        15
    Vegetable  
       198 天前
    反转了,原来是女流 66 /doge
    teenight
        16
    teenight  
       198 天前 via Android
    @2i2Re2PLMaDnghL 大可不必
    cco
        17
    cco  
       198 天前
    记录一下 offset
    murmur
        18
    murmur  
       198 天前   ❤️ 1
    @Kilerd 我认为挺好的,我想问下楼主到底是做什么职业的,把 v2 当知乎用刷主题的么

    我看到了安卓、ios 、搜索、算法各种各样的问题
    murmur
        19
    murmur  
       198 天前   ❤️ 2
    @teenight 你去看他历史主题,技术提问讲究准,直接说你要干嘛,你干了什么,哪里遇到问题,编程相关可能还得贴一些代码

    而不是把整篇文章写满妹妹哥哥的
    2i2Re2PLMaDnghL
        20
    2i2Re2PLMaDnghL  
       198 天前
    @Kilerd 我的言语仅仅是「解构」了「楼主的行为」
    那么请问是哪种情况?
    1. 「解构」让人恶心;
    2. 「楼主的行为」让人恶心;
    3. 你要(在心理上)维护「楼主的行为」而不让人「解构」之?
    0DBBFF
        21
    0DBBFF  
       198 天前
    每个人的侧重点不一样,有些人看到这个问题会纠结楼主是男女,有些人看到会想问题怎么实现。第一类人不必长篇大论必须让第二类人改变侧重点,没必要
    lisongeee
        22
    lisongeee  
       198 天前
    姐姐你弄好了嘛?妹妹我也想知道解决方法,球球各位哥哥告诉我吧
    shiguiyou
        23
    shiguiyou  
       198 天前
    排版,多少页,记录下来?
    aneostart173
        24
    aneostart173  
       198 天前
    问题太简单,与问题无关的词语太多。
    2i2Re2PLMaDnghL
        25
    2i2Re2PLMaDnghL  
       198 天前   ❤️ 2
    @0DBBFF vice versa
    这贴还真没看到第一类人尝试让第二类人改变侧重点,只看到第三类人在尝试让第一类人改变侧重点。
    Kasumi20
        26
    Kasumi20  
       198 天前
    小哥第一次回答楼主的问题,这边呢,就是会给您一个高质量的方案

    先把用户的 root 权限拿到,然后截屏,用 OCR 识别当前屏幕内容,然后下次直接全文搜索,就可以定位到上次阅读的地方啦
    hxse
        27
    hxse  
       198 天前
    @2i2Re2PLMaDnghL #20 护 x 使者表示愤怒
    maokabc
        28
    maokabc  
       198 天前 via Android
    不就记录个字符索引的事,有什么特别的?
    niubee1
        29
    niubee1  
       198 天前
    就这个问题本身而言,最大的问题在于,第一页或者第几行是一个相对概念,因为一旦修改字体和行间距修改了,内容的相对位置就变了。之前做过一个分页的 txt 阅读器,用过的方法是,先记录当前页的第一个字的 offset ,再次打开的时候,根据分页结果,找到这个 offset 在那一页,然后自动跳过去,或者预先算好结果,在修改了字体大小或者间距的时候重新计算并缓存。
    fucku
        30
    fucku  
       198 天前
    气抖冷, 女生就不能问问题了吗
    zhanlanhuizhang
        31
    zhanlanhuizhang  
       198 天前
    你要你用什么实现的。是左右翻页,还是上下翻页。还是滚动翻页。
    abvatous
        32
    abvatous  
       198 天前
    Android 端的话,你可以先获取下屏幕的宽 X 高,然后根据你的 UI 设计,算算不同屏幕每行显示的字数
    CoCoMcRee
        33
    CoCoMcRee  
       198 天前
    先把分章分页逻辑加上吧. 常规做法是根据章-页来存取阅读记录的
    abvatous
        34
    abvatous  
       198 天前
    @abvatous #32

    根据这个每行的字数,悬停你可以画个线或者做个小标记来记录吧,这个可以根据 点击+滑动,结合字数判断吧,这个也是个思路

    粗暴点直接记录屏幕一半的那个文章位置~~
    jaredyam
        35
    jaredyam  
       198 天前
    像极了我小学时玩网游时让大哥送我点装备时的装疯卖傻
    EscYezi
        36
    EscYezi  
       198 天前 via iPhone
    如果可以的话,做成分段加载,这样就可以记录上次加载的位置了
    kiroter
        37
    kiroter  
       198 天前
    估计得自定义 View , 定位具体字节数
    ysc3839
        38
    ysc3839  
       198 天前 via Android
    改用 Web 显示,然后直接调 Element.scrollIntoView()
    Kilerd
        39
    Kilerd  
       198 天前   ❤️ 2
    @murmur 因人而异吧,我反感的是他言语中的「 po 一张露奶照片」, 「他们想要跟你嘿咻」,「因为我的性欲而获得加分」。

    个人认为在一个正经的论坛里面不太适合发布这种明显有着 discrimination 的言论。 你可以批判楼主的言辞不适合技术论坛,那么我也可以批判某一楼层的言辞。

    换一种方式表达出这样的情绪,我估计就站在层主这边了。然而他这样的发言总给我一种小流氓在挑衅良家妇女的感觉
    encro
        40
    encro  
       198 天前
    @niubee1 #29 楼回答的应该是正确的

    以微信读书为例:
    如何记忆阅读位置:记的应该是客户端读到当前页的第一个字符的位置。为了减少客户端的运算量,那么可以同时记录当前阅读到哪个章节了。
    如何根据记忆位置换算章节:通过 Cavas 或者后端语言,传字体,屏幕尺寸,字体大小进去,人工排版换行,获取字符所在的页数以及行数。

    参考:

    canvas https://www.w3school.com.cn/tags/canvas_measuretext.asp

    PHP https://www.php.net/imagettfbbox

    JAVA https://www.codenong.com/258486/


    PS:

    @2i2Re2PLMaDnghL
    @shintendo
    @Kilerd
    @jaredyam

    在看到你们的评论前我根本就没有注意作者的性别,发性别可能是因为社区的氛围对女性不友好,希望你们在回复的时候注意点,恶意揣度他人用意毫无意义,想办法吸引人回复是每个发帖者都在干的。
    encro
        41
    encro  
       198 天前
    @niubee1

    想过另外一种方式:计算总行数,以及当前页第一行在总行数的位置,这样每次修改字体时计算一次,以后字体不变就不用重新计算了,但是用户看了其他书改了字体,再回来就出 BUG 了,目前没有解决办法,所以可能还是每次计算比较靠谱。
    encro
        42
    encro  
       198 天前
    https://stackoverflow.com/questions/1134586/how-can-you-find-the-height-of-text-on-an-html-canvas

    如果不是 text ,好包含符文本,可以参考这个。

    微信读书包含备注信息,字体,标题,图片等,估计采用的是自己的机构化信息。
    可以参考 https://github.com/danielearwicker/carota 的 demo
    HuPu
        43
    HuPu  
       198 天前
    @2i2Re2PLMaDnghL 学到了 马上注册小号换成女头
    langxuan
        44
    langxuan  
       198 天前
    @encro 不知道有没有排版无关的方法,不然换设备或者改分辨率这个 offset 就失效了
    0x2CA
        45
    0x2CA  
       198 天前
    直接记录字节偏移,读取就流式读取,
    fenglangjuxu
        46
    fenglangjuxu  
       198 天前
    我倒觉得 一楼 虽然话说的有点糙 但是道理是这样的
    @shintendo 这个说的很对
    neptuno
        47
    neptuno  
       198 天前
    有些人是被女生伤害过吗 hhhh
    2i2Re2PLMaDnghL
        48
    2i2Re2PLMaDnghL  
       197 天前
    @Kilerd 我不知道为什么人们总是把 discrimination 搞成 defiance 类似的意思
    discrimination 的词根是 distinguish ,区分。
    discrimination 的意思就是『区别对待(某些人)』,显然,为此主题引入区别对待的人是楼主,而不是我。
    尝试解构楼主的 discrimination 从而还原 equality 的言论,竟然被指为 discrimination ,十分好笑。
    (顺便,中文翻译『歧视』也是『分歧地看待』,日语翻译『差別』纯汉字不用我解释)
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2406 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 05:29 · PVG 13:29 · LAX 22:29 · JFK 01:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.