V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
MoHen9
V2EX  ›  Android

如何解决 TextureView 闪动的问题?

  •  
  •   MoHen9 · Feb 28, 2019 · 13468 views
    This topic created in 2614 days ago, the information mentioned may be changed or developed.

    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 replies    2019-03-01 12:11:58 +08:00
    nicevar
        1
    nicevar  
       Feb 28, 2019
    看具体情况,有 demo 比较好查问题,lock 之后清理一下 canvas 试过么,不用 SurfaceView 是对的,SurfaceView 问题太多,兼容老的设备才用
    MoHen9
        2
    MoHen9  
    OP
       Feb 28, 2019 via Android
    @nicevar 怎么清理? drawColor()?
    nicevar
        3
    nicevar  
       Mar 1, 2019
    ```
    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    canvas.drawPaint ( paint);
    ```
    MoHen9
        4
    MoHen9  
    OP
       Mar 1, 2019 via Android
    @nicevar 好,谢谢!我试一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   986 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 149ms · UTC 23:00 · PVG 07:00 · LAX 16:00 · JFK 19:00
    ♥ Do have faith in what you're doing.