最近在做带透明MP4视频的渲染播放,原理就是视频的一半是只有黑白颜色的透明通道,另一半则是视频原来的画面,只要利用OpenGLES在渲染时提取原来画面的对应位置上的透明通道的透明度,设置到原来画面的像素上,就可以达到播放透明视频的效果。
原理很简单,实现也不难,但是中间遇到了一些坑,折腾了一段时间才弄明白,主要原因还是基础原理不了解,还是要多学习。
最近在做带透明MP4视频的渲染播放,原理就是视频的一半是只有黑白颜色的透明通道,另一半则是视频原来的画面,只要利用OpenGLES在渲染时提取原来画面的对应位置上的透明通道的透明度,设置到原来画面的像素上,就可以达到播放透明视频的效果。
原理很简单,实现也不难,但是中间遇到了一些坑,折腾了一段时间才弄明白,主要原因还是基础原理不了解,还是要多学习。
当我们使用setLayoutParams
修改控件尺寸时,要注意控件内部的子View不一定会被回调onMeasure
。所以会存在设置控件尺寸后,内部的子View尺寸没有被改变的情况。
具体原因看源码,setLayoutParams
内部会回调requestLayout()
,最终会触发父布局层层回调子View的onMeasure
,但是在此之前会先判断子View的布局是否有被修改,因此可能会导致子View没有重新计算自己的尺寸。
RxJava上提供了一系列的线程池,用起来确实很方便,不过随便用的话很容易遇到坑。
最近有一个需求,用一个八宫格显示图片,后台不断发送图片过来,每个格子的图片定时刷新,同时做渐变切换的效果。
同事用RecyclerView
+自定义渐变效果的ItemAnimator
实现这个效果,具体来说就是每次要切换图片时,调用notifyItemChanged()
对应的格子。
但是效果不如预期,经常会出现前一张图片没有完全变成0透明度,导致两张图片看起来像是透明叠加在一起。
最近遇到一个神奇的问题——一个Activity
调用finish()
后,该页面的onStop()
和onDestroy()
间隔大概十秒后才被调用。
ViewPager
搭配Fragment
做懒加载,这个很常见。需要小心的是Fragment
在ViewPager
中的生命周期,这个不多说。
最近遇到一个坑,这个坑的关键点是
1 | ViewPager.setOffscreenPageLimit(); |
假设通过这个方法设置了一个值(比如2),然后在ViewPager
中滑动加载了2个Fragment
后,第三个Fragment
的加载会出现问题,具体表现是该调用的方法都有调用,但是就是数据加载出问题。
数据加载我是用了RxLifecycle绑定到FragmentEvent.DESTROY_VIEW
,初步怀疑是生命周期在作祟。
目前的解决方法是先将setOffscreenPageLimit
设置为和自己加入的Fragment
数量一致。比较好的解决方法是自定义ViewPager
实现懒加载。
Update your browser to view this website correctly. Update my browser now