开发者社区> 阿策~> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android 优化个人封装仿网易新闻可滑动标题栏 TabLayout (文字或图标)

简介:       小菜在向朋友推荐了自己修改封装的仿网易顶部滑动标题栏 TabSlideLayout 滑动内容可以是文字也可以是网络图标,其原型为 FlycoTabLayout,但是因为年代很久远,小菜当时技术太渣,存在一些小问题,后期做过一些优化,今天趁机会整理一下。
+关注继续查看

      小菜在向朋友推荐了自己修改封装的仿网易顶部滑动标题栏 TabSlideLayout 滑动内容可以是文字也可以是网络图标,其原型为 FlycoTabLayout,但是因为年代很久远,小菜当时技术太渣,存在一些小问题,后期做过一些优化,今天趁机会整理一下。


优化内容:

  1. 网络状态不佳情况下,图片加载缓慢,有时加载不出来,如下图:
  2. 在部分三星手机上展示效果不佳,图片显示很小,如下图:


  3. 可以动态设置图片是否绘色,因有个别需求用户要展示的是彩色的漂亮图标,强制绘色便是画蛇添足。

问题查找:

      问题一 的出现主要是因为图片加载方式不太合理,小菜以前用的是 Glide 中 BitmapImageViewTarget(iv) 方式,现在更换为 SimpleTarget<Bitmap>() 方式,两者的区别小菜还不能简洁明了的说清楚,有兴趣的朋友可以详细查看一下源码。
      小菜的理解是,BitmapImageViewTarget() 方式优点:对于加载大图的整个过程处理比较好,可以设置加载过程中进度条等展示效果;而且该方式可以加载 Gif 图,也可以对 Gif 图的第一帧图进行绘色,但是没有 Gif 动画效果,就像一张普通的 png 图;缺点则是整体的处理时间较长,在网络状态不佳情况下有可能会加载失败。SimpleTarget() 方式直接优点是图片加载速度快,图片的大小根据 ImagView 来决定,不用重新计算;缺点是直接返回的 Bitmap() 不能加载 Gif 图。综合考虑,小菜觉得 SimpleTarget() 方式较合适。
      问题二 的出现主要针对不同手机的适配,问题同样出在 Glide 图片加载部分,以前小菜用的 BitmapImageViewTarget() 并计算图片的宽高,现更改为 SimpleTarget() 方式解决。
      问题三 的出现只是因为当时考虑不周全,可以在 attrs 中添加一个属性 is_change_color,并在图片绘色过程中处理一下即可,同时设置 set/get 方法,可以根据业务需求动态修改,详情请直接跳转 源码 Demo


      Tips:针对于问题二,图片布局中 ImageView 建议设置为 match_parent 方式,因为我们用户觉得 wrap_content 方式在部分三星手机上图不如华为手机大,小纠结。


解决方案:

  1. Glide 加载方式更换为 SimpleTarget(),如下:
Glide.with(mContext).load(title).asBitmap()
        .placeholder(R.mipmap.top_default_bg).diskCacheStrategy(DiskCacheStrategy.SOURCE)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                if (mChangeColor) {
                    resource = BitmapUtil.tintBitmap(resource, (position == 0) ? mTextSelectColor : mTextUnselectColor);
                }
                iv_tab_title.setImageBitmap(resource);
            }
        });
  1. 在 attrs 中添加是否绘制图片颜色的属性,可以在 xml 或 Java 代码中进行设置:
<!-- 设置是否绘制图片颜色 -->
<attr name="tl_is_change_color" format="boolean" />
mChangeColor = ta.getBoolean(R.styleable.SlidingTabLayout_tl_is_change_color, true);

public boolean isChangeColor() {
    return mChangeColor;
}
public void setChangeColor(boolean mChangeColor) {
    this.mChangeColor = mChangeColor;
}
图标绘制统一颜色

图标不绘制颜色.jpg

      小菜认为,优化是一个漫长的过程,是随着经验的积累与实际效果的反馈共同进行的,在使用过程中发现不合理的地方还请各位多多指教。


      下面的是小菜的公众号,欢迎闲来吐槽哦~


公众号.jpg

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android 二次优化个人封装仿网易新闻可滑动标题栏
      小菜前段时间根据超多 star 的 FlycoTabLayout 自己修改封装了仿网易顶部滑动标题栏 TabSlideLayout 滑动内容可以是文字也可以是网络图标,并整理了两篇小博客: Android 优化个人封装仿网易新闻可滑动标题...
2668 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
159 0
Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)
 Android大数据、断点续传、耗时下载之DownloadManager开发简介(1) Android涉及到的网络数据请求,如果是零星数据、且数据量较小(几十KB到几百KB,1MB以内),一般的,可以自己使用Android原生HTTP或者第三方开源框架如Volley(相关文章:http://blog.
936 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
853 0
+关注
阿策~
Android/Kotlin/Flutter 小菜鸟,基础技术博客学习与整理~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
手机卫士性能优化方案-Android篇
立即下载
Android组件化实现
立即下载
Android插件化:从入门到放弃
立即下载