关于ViewPager预加载包含SurfaceView的问题

本人从事androidTV开发,做launcher时候用的ViewPager加载多个fragment.正常逻辑是fragment显示的时候才去播放视频,当预加载的fragment中含有SurfaceView并且fragment在生命周期方法中有调用播放方法的时候会导致播放.


解决方案

网上有很多说去设置预加载数量来解决,但是源码中有判断数量小于默认值就设置为1所以行不通.

    private static final int DEFAULT_OFFSCREEN_PAGES = 1;

    public void setOffscreenPageLimit(int limit) {  

        if (limit < DEFAULT_OFFSCREEN_PAGES) {  

        Log.w(TAG,"Requested offscreen page limit " + limit + " too small; defaulting to " + DEFAULT_OFFSCREEN_PAGES);  

            limit = DEFAULT_OFFSCREEN_PAGES;  

        }  

        if (limit != mOffscreenPageLimit) {  

            mOffscreenPageLimit = limit;  

            populate();  

        }  

    }

还有通过自定义一个ViewPager,把源码copy过来,修改这个DEFAULT_OFFSCREEN_PAGES值为0,这样就不会预加载,但是效果很不好.

我想的解决方案是通过ViewPager的OnPageChangeListener,判断当前显示的fragment是否含有SurfaceView,再通过onPageScrollStateChanged(int state)

参数state(SCROLL_STATE_IDLE:什么都没做,SCROLL_STATE_DRAGGING:开始滑动,SCROLL_STATE_SETTLING:滑动结束)

控制视频播放.这样就可以达到预期的效果,预加载但不会去播放视频.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容