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

一个 DrawerLayout 无法遮盖 SurfaceView 的问题,一个自定义 View 优化的问题

  •  
  •   lixyz · 2019-10-16 04:09:10 +08:00 · 11096 次点击
    这是一个创建于 1877 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了一个控件,就是一个圆形,然后里面有波浪,用来展示进度,如下图: https://github.com/liguobing/pic/blob/master/222.png 里面的波浪是使用一个属性动画,循环播放,然后调用 postInvalidateOnAnimation() 方法来实现的

    但是发现一个问题,在查看 Profiler 的时候,发现内存占用会缓慢的增长,以大概每秒 0.1M 、0.2M 的速度增加,把这个自定义 View 注释掉,就不增长了,所以问题肯定出现在这里。

    我在 onDraw 方法中把所有新建对象的语句都优化掉了,可这个问题还是存在。

    这究竟是因为啥呢?

    实在找不着头绪,所以我就想着不去继承 View,而是使用 SurfaceView,然后又出现了新的问题:

    页面中有一个抽屉菜单 DrawerLayout,当抽屉菜单打开的时候,抽屉将布局向右推开,布局中的控件变暗,但是唯独 SurfaceView 没有变暗,如下图:

    https://github.com/liguobing/pic/blob/master/111.png

    搞懵了,这又是什么情况?有了解的大神吗?百度谷歌一大圈了,也没找出个所以然来,stackoverflow 上提问了,也没人回答,是真的烦。。。

    3 条回复    2019-10-23 10:26:54 +08:00
    kile
        1
    kile  
       2019-10-16 12:42:52 +08:00
    SurfaceView 是用 Zorder 排序的,他默认在宿主 Window 的后面,SurfaceView 通过在 Window 上面“挖洞”(设置透明区域)进行显示
    lixyz
        2
    lixyz  
    OP
       2019-10-16 14:59:48 +08:00
    @kile 是的,抽屉菜单打开之后,其他控件就像是被一个遮盖曾遮住一样变暗,SurfaceView 就像是在这个遮盖层上“挖了个洞”一样,有没有办法也把它遮盖住啊
    felixlong
        3
    felixlong  
       2019-10-23 10:26:54 +08:00
    @lixyz TextureView
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5786 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 03:25 · PVG 11:25 · LAX 19:25 · JFK 22:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.