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

2019-10-16 04:09:10 +08:00
 lixyz

写了一个控件,就是一个圆形,然后里面有波浪,用来展示进度,如下图: 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 上提问了,也没人回答,是真的烦。。。

6899 次点击
所在节点    Android
3 条回复
kile
2019-10-16 12:42:52 +08:00
SurfaceView 是用 Zorder 排序的,他默认在宿主 Window 的后面,SurfaceView 通过在 Window 上面“挖洞”(设置透明区域)进行显示
lixyz
2019-10-16 14:59:48 +08:00
@kile 是的,抽屉菜单打开之后,其他控件就像是被一个遮盖曾遮住一样变暗,SurfaceView 就像是在这个遮盖层上“挖了个洞”一样,有没有办法也把它遮盖住啊
felixlong
2019-10-23 10:26:54 +08:00
@lixyz TextureView

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX