Android

最近在做带透明MP4视频的渲染播放,原理就是视频的一半是只有黑白颜色的透明通道,另一半则是视频原来的画面,只要利用OpenGLES在渲染时提取原来画面的对应位置上的透明通道的透明度,设置到原来画面的像素上,就可以达到播放透明视频的效果。

原理很简单,实现也不难,但是中间遇到了一些坑,折腾了一段时间才弄明白,主要原因还是基础原理不了解,还是要多学习。

More...

当我们使用setLayoutParams修改控件尺寸时,要注意控件内部的子View不一定会被回调onMeasure。所以会存在设置控件尺寸后,内部的子View尺寸没有被改变的情况。

具体原因看源码,setLayoutParams内部会回调requestLayout(),最终会触发父布局层层回调子View的onMeasure,但是在此之前会先判断子View的布局是否有被修改,因此可能会导致子View没有重新计算自己的尺寸。

RxJava上提供了一系列的线程池,用起来确实很方便,不过随便用的话很容易遇到坑。

More...

最近有一个需求,用一个八宫格显示图片,后台不断发送图片过来,每个格子的图片定时刷新,同时做渐变切换的效果。

同事用RecyclerView+自定义渐变效果的ItemAnimator实现这个效果,具体来说就是每次要切换图片时,调用notifyItemChanged()对应的格子。

但是效果不如预期,经常会出现前一张图片没有完全变成0透明度,导致两张图片看起来像是透明叠加在一起。

More...

ViewPager搭配Fragment做懒加载,这个很常见。需要小心的是FragmentViewPager中的生命周期,这个不多说。

最近遇到一个坑,这个坑的关键点是

1
ViewPager.setOffscreenPageLimit();

假设通过这个方法设置了一个值(比如2),然后在ViewPager中滑动加载了2个Fragment后,第三个Fragment的加载会出现问题,具体表现是该调用的方法都有调用,但是就是数据加载出问题。

数据加载我是用了RxLifecycle绑定到FragmentEvent.DESTROY_VIEW,初步怀疑是生命周期在作祟。

目前的解决方法是先将setOffscreenPageLimit设置为和自己加入的Fragment数量一致。比较好的解决方法是自定义ViewPager实现懒加载。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×