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

如何解决 TextureView 闪动的问题?

  •  
  •   MoHen9 · 2019-02-28 10:49:40 +08:00 · 8761 次点击
    这是一个创建于 2077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1、我使用 TextureView 绘制心电波形,当 TextureView 被一个 Dialog 遮住时,会导致波形的某几小段出现时有时无的闪动,dialog 取消后也闪动,除非波形被新数据覆盖;举个例子就是:小明手持一个大拖把,不断往前推,后面留下了他的脚印,但由于盖了一层保鲜膜,导致个别脚印时有时无,拿开保鲜膜后依然如此。

    2、主要逻辑:通过 lockCanvas(dirty)锁定一块矩形区域,然后 canvas.drawLine(startX, startY, stopX, stopY, paint);

    3、尝试解决方式:网上有解决 SurfaceView 闪动的方法,用一个 Canvas + Bitmap 解决这个问题,但是在 TextureView 中没用;我使用了 new Surface(TextureSurface)对象的方法绘制,且加了锁,稍微好了点,但依然存在闪动。

    4、为什么用 TextureView:主要是因为有多个用户的波形要绘制,而且要放在 Fragment 中,还要改变 TextureView 的大小,操作比较多,完全是把 TextureView 当做普通 View 操作了,所以没选 SurfaceView。

    4 条回复    2019-03-01 12:11:58 +08:00
    nicevar
        1
    nicevar  
       2019-02-28 10:56:57 +08:00
    看具体情况,有 demo 比较好查问题,lock 之后清理一下 canvas 试过么,不用 SurfaceView 是对的,SurfaceView 问题太多,兼容老的设备才用
    MoHen9
        2
    MoHen9  
    OP
       2019-02-28 12:04:52 +08:00 via Android
    @nicevar 怎么清理? drawColor()?
    nicevar
        3
    nicevar  
       2019-03-01 12:04:38 +08:00
    ```
    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    canvas.drawPaint ( paint);
    ```
    MoHen9
        4
    MoHen9  
    OP
       2019-03-01 12:11:58 +08:00 via Android
    @nicevar 好,谢谢!我试一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.