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

想请教安卓大佬们一个问题

  •  
  •   troku · 10 天前 · 1238 次点击
    我想画一个柱状图的图表,它具有大数据量(几万个数据点)和极快的刷新速度(可能 50ms )

    因为我比较熟悉 react ,所以我一开始就想着用 react native 试试,我使用了 React Native Skia( https://github.com/Shopify/react-native-skia?tab=readme-ov-file#react-native-skia)
    来画这个图,但效果差强人意。在大数据量和极快的刷新速度的要求下,图表卡顿严重。

    我画的图,如下所示


    这个图需要用 2d 来模拟 3d 。所以虽然能看到 x, y, z 三个轴,但是柱子仍然是 2d 。

    我想问一下如果用安卓原生来实现,应该用什么样的技术,或者有没有能画这种图的现成库,可以满足大数据量和高刷新速度而不卡顿。
    10 条回复    2024-05-13 17:01:06 +08:00
    anzu
        1
    anzu  
       10 天前 via iPhone
    真的有必要展示那么多数据吗?这图给人感觉每次也就几百个数据点。随机抽样展示差不多就行了吧。
    zuiyue123
        2
    zuiyue123  
       10 天前
    一般这种都是用抽样绘制算法实现的
    troku
        3
    troku  
    OP
       10 天前
    @anzu 其实我也感觉意义不大,但是需求是这样没办法
    ExplodingFKL
        4
    ExplodingFKL  
       10 天前
    数据数量上去了真没啥好办法,如果数据是增量还好,每次只绘制差异
    Building
        5
    Building  
       10 天前
    数据抽样 + 避免重复绘制,50ms 就是靠画图生成 image 都画完了吧
    pengzhile
        6
    pengzhile  
       10 天前
    感觉这种实时渲染压力太大了吧,能不能滞后一点时间然后离线渲染
    ZGame
        7
    ZGame  
       10 天前
    你这跟 Android 应该没啥关系吧..建议标题改成 Android 下 skia 渲染优化...
    FranzKafka95
        8
    FranzKafka95  
       10 天前 via Android
    OpenGL ES 或者 Vulkan ,用 Native C++,不需要 fence
    bagel
        9
    bagel  
       10 天前
    5 万个数据点,一个点画一条线对应 2 个三角形,一共 10 万个三角形,50ms 更新一次,在 60fps 下一个 frame 需要更新约 3 万个三角形,在旗舰机型上用手动优化过的 OpenGL 代码应该可以做到的,还不行就上 Vulkan🫤

    React Native Skia 使用的是静态链接库,在 Android 上硬件加速性能不是最优。
    troku
        10
    troku  
    OP
       10 天前
    @bagel
    @FranzKafka95 谢谢大佬🌹🌹🌹
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1059 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:33 · PVG 03:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.