重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章为大家展示了怎么在Android中实现列表动图展示,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联专注于新荣网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供新荣营销型网站建设,新荣网站制作、新荣网页设计、新荣网站官网定制、重庆小程序开发公司服务,打造新荣网络公司原创品牌,更为您提供新荣网站排名全网营销落地服务。
首页
假设下面的“首页”“、”关注”、“消息”、“我”4个tab都有动图,当我们点击其他页面时,当前页被隐藏,而根据Fresco的官方文档Fresco中文官方文档通常只有当SimpleDrawView被移出屏幕才会停止播放动画(我在测试中发现通常Activity生命周期级别的也会触发),所以当tab页隐藏时动图依旧在被渲染,所以我们需要控制动图的停止和播放,只有当前页展示时,才播放动图:
Animatable animatable = mSimpleDraweeView.getController().getAnimatable(); if (animatable != null) { animatable.start(); // later animatable.stop(); }
只在可见区域展示
当我们做列表动图的时候,无论控件是listview还是recyclerview,数据和item的绑定都会在屏幕外绑定,而此时站在性能优化的角度上,是不需要渲染动图的;当动图滑动在列表边界的时候,是不是说明用户的焦点已经不在这张图上了,所以此时可以提前在动图滑出屏幕外之前停止动图播放(在项目中我与产品商定动图播放和停止的边界值定为图片的1/2,也就是说图片滑入屏幕自身长度1/2的时候播放动图,滑出屏幕自身长度1/2的时候停止播放);当快速滑动的时候也应当停止动图渲染(平时加载静图可能不需要在意,但是在android老手机上加载很多动图会使得cpu和内存大幅度浮动)。
也就是说当列表在做数据绑定的时候我们应当先去加载图片但并不渲染动图,动图播放和停止唯一的判断标准是滑入滑出屏幕的长度,如果是快速滑动则无视第二个规则直接停止所有的动图。
上面的第二、第三个处理会有些许的代码量,而且重点是时机的判断不是动图的处理,这里着重讲策略,代码就略过了。对于第一个处理,Fresco本身是支持的:
DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(false) . // 其他设置(如果有的话) .build();
setAutoPlayAnimations即表示是否在加载完成之后立即播放动图,这里设置为false即可,滑入播放调用上一张图的方法就行了。可是还有一种情况,动图在我们滑入的时候还没有加载完成,那么我们就可以设置一个标示来表示是否播放,因为SimpleDrwaView是可以拿到动图加载的回调的:
ControllerListener controllerListener = new BaseControllerListener() { @Override public void onFinalImageSet( String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) { if (anim != null && tag == BEGAIN) { // 其他控制逻辑 anim.start(); } } };
滑入屏幕时,就把tag 置为BEGAIN,滑出再置空就行了,并且这里我们不用担心重复播放和停止的问题,这里的anim对象其实是AnimatedDrawble2对象,而该对象在start和stop的时候都对状态进行了判断。
图片的规格尺寸
规格
相较于传统的gif,同质量的webp体积更小,更能节省存储空间,但是在解码上webp更为耗时,所以能用webp尽量用webp,实在还是卡再考虑用gif。
帧率
目前调研发现的动图帧率一般是10帧或者20帧,帧率不要太高了,不然会加大cpu的占用率,其实如果Fresco的使用方式没出问题,内存的问题Fresco已经帮你搞定了,其他的优化主要是针对cpu占用率优化的。在项目中我们加载的动图最后采用的是20帧(模仿腾讯谋产品的策略,最好控制在10帧其实,这款腾讯的产品在一页上展示的动图明显比其他同类型产品展示的数量少)。
大小
动图的大小也会影响解码耗时,在手机端可以使用小图,在项目中,我们手机端的动图最多在200kb左右。
在实际的开发中,可能因为业务的关系,上述的策略不能保证全部都做到,这里时候就得根据业务形态做对应的取舍,这里可能是一个长久优化的过程,毕竟这种新的动图封面设计以前都没有遇到过。
上述内容就是怎么在Android中实现列表动图展示,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。