最近在做带透明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