- 博客(32)
- 收藏
- 关注

原创 ViewPager相片打标签
世面上现在有很多图片分享社交类app都喜欢加上打标签这个功能,比如比较知名“nice”、“理理相册”等等,他们打标签的方式可能各不相同但是本质原理是一样的,我感觉理理相册做的很好,于是参照它的交互模式自己实现了一下,基本做到了高仿。项目简述通过ToolBar的menu菜单点击添加标签;作为ViewPager外嵌套一层帧布局使用,解决了和ViewPager的滑动冲突;随意在界面拖动标签,加入严格
2017-07-12 12:54:24
344
原创 Flutter重构开发
这种错误的应用场景一般出现在TabBarView和NavigationBar之间配合使用的过程中,一般情况下我们会创建多个controller对应到TabBarView的每一个widget界面,但是为什么还提示我们使用一个controller绑定多个界面呢?最近学习了flutter技术,然后用flutter技术重构了线上项目的首页板块,较深入的理解flutter的状态管理和ui组件的使用,总结下遇到的几点问题。大量数据可能导致性能问题。
2023-05-30 18:02:37
2149
原创 Flutter基础架构和Getx使用
移动app开发在跨平台需求下,使得我们学习使用flutter跨平台框架,帮助我们产生高效率高质量的UI界面,这里简介下flutter项目开发基础脚手架,和getx这个状态管理框架使用。
2023-03-30 14:41:19
679
原创 高仿小红书Banner的指示器
Banner的实现方式大同小异,这里我使用banner这个开源插件为例,实现一个和小红书类似的Indicator。由于公司项目的原因,效果差不多,这里直接放小红书效果demo: Banner指示器 直接贴代码:public class CustomizedCircleIndicator extends BaseIndicator { public static final in
2022-05-09 16:35:07
1537
8
原创 动态代理实现aop
在Java的开发生态中,aop也叫面向切面编程是一个很重要的开发思想,它的意思是程序在运行时,动态地将用反射将代码切入到类的指定方法、指定位置执行,从而可以实现类似事务管理/记录日志/细粒度权限控制…等。其实就是类似servlet技术中的Filter拦截器,但是filter只能运行在Servlet之外,具体到我们的业务代码就不通用了。面向切面就是我们拦截自定义方法对它执行前后做一些我们需要的操作。...
2020-03-31 18:02:53
242
1
原创 Android组件化Gradle插件Calces源码解析
随着很多公司的业务越来越多样化和复杂化,组件化开发也越来越流行,为我们调试代码和多人协助开发带来了巨大的好处,我们肯定会遇到下面几个痛点:组件是否单独运行 if (isDebug) { apply plugin: 'com.android.application' } else { apply plugin: 'com.android.library...
2019-01-12 18:29:06
629
原创 Android平台下编译FFmpeg用于视频压缩处理
最近因为项目需求需要用到视频压缩处理,其实这个功能要实现出来很简单,到Github上拉几个知名的库分分钟搞定,但是那些比较知名的库功能很齐全所以包也比较大,arm、arm-v7a、arm64-v8a、x86、x86_64等基本全部做到了支持。本文仅仅分析arm-v7a架构的编译,其他的几种处理方式原理是一样的,有兴趣自己可以编译下。编译环境Windows下编译(需要配置MinGW)Android
2017-11-17 18:24:12
2189
原创 重新从源码的角度看Handler消息通信机制
工作这么久了,刚开始工作的时候handler可能用的比较多,那个时候可能各种网络请求框架做的没现在的出色,很多时候我们网络请求得到数据后或者一些耗时操作都需要手动通过handler来更新ui,现在可以说不存在这个问题了。但是突然想到了handler的很多细节知识点,所以决定还是有必要记录下这个讲透了的话题,本文有借鉴过网络上优秀的文章,加上自己的总结,感谢无私的前辈们。为什么设计Handler机制我
2017-08-08 18:16:59
398
原创 Fragment系列之嵌套导致错乱的onActivityResult数据传递
当我们采用单Activity+多fragment架构的时候,我们便会经常嵌套fragment使用,这里又有一个深坑就是子fragment中使用startActivityForResult去启动一个Activity后,子fragment当中的OnActivityResult方法不能回调执行到,只能在父Fragment的OnActivityResult回调执行(此时 Activity也能接收)。解决方案
2017-07-17 18:33:20
436
原创 Fragment系列之视图重叠的问题
关于fragment重叠现象相信很多人遇到过,那到底是什么原因导致的呢?本质上还是从“内存重启”这个说法讲起( Fragment系列之调用getActivity为null的问题),前文已经解释了,这里就不重复概述了。造成原因1.重复replace|add Fragment当应用重启发生后,我们在其onCreate()的方法中没有判断saveInstanceState==null,结果重新执行了一遍代
2017-07-17 17:59:43
690
原创 Fragment系列之Can not perform this action after onSaveInstanceState
使用fragment过程当中产生异常的日志信息:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceStateat android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)at android.ap
2017-07-17 15:14:00
407
原创 Fragment系列之调用getActivity为null的问题
说起Fragment相信每个做Android开发都不会陌生,Fragment翻译就是“碎片,片段”的意思,Google官方从Android 3.0(对应API 11)引入Fragment之后,Fragment基本成了每个app的必备组件之一,地位一下子几乎和Activity平起平坐了,因为随着app界面ui的发展,越来越多的界面需要各种复杂的交互方式,倘若我们所有代码都放在一个Activity中来处
2017-07-17 13:05:34
1669
原创 Android多点触控之ZoomImageView完全解析
ZoomImageView是一个类似photoview的图片预览控件,实现了对图片的手势放大缩小平移,以及双击放大缩小解决和viewpager滑动冲突等功能,主要是通过GestureDetector,Matrix相关api以及对事件的ontouch处理实现的,这个代码网上能搜索到很多,但是因为注释少所以要完全读懂有些困难,于是本人整理了一段时间,写了一个完整的注释版本,基本每行代码都做到了讲解,大家
2017-06-26 18:04:26
6250
原创 Android的View坐标系
最近经常用到view的getLeft(),getTop()等等获取view坐标的方法,这一系列类似的方法有很多个,一不注意就写错了,网上流传的几张图解都有些年代了,便于理解我自己做了一个直观的图来理解说明:Android有两种坐标系:分别为Android坐标系和视图坐标系,Android坐标系,视图坐标系,主要区别看图说话:View获取自身宽高getHeight():获取View自身高度getWi
2017-06-26 14:32:52
363
原创 原生CountDownTimer 类实现获取验证码的按钮
做了这么久Android今天才知道原来系统给我们提供了一个CountDownTimer的类可以实现倒计时按钮,比传统的我们用Timer+TimerTask或者开线程方便多了,使用也是很简便就是加上监听处理倒计时开始和结束的回调就行了。mButton.setOnClickListener(new View.OnClickListener() { @Override public voi
2017-05-08 13:25:50
434
原创 撸一个最简单的条件选择器picker(不联动)
用过各种时间选择器,地址选择器等等,但是有的时候需要一个类似身高体重,性别年龄的选择器,这种就是我下面所要说的不联动选择器,网上很多demo也有这种效果但是大多是封装完善的万能选择器,你如果抽取出来的话代码量就太多了,对于项目来说得不偿失,于是我写一个最简单的条件选择器。 思路很简单,底部我们使用一个dialog上面加上两个WheelView就可以了,看代码:public class Bottom
2017-05-03 11:43:12
1028
原创 Android高德地图poi检索仿微信发送位置
最近项目需求把发送定位模块改成类似微信发送位置给好友的效果,我使用了高德地图实现了一个demo,效果图如下:从主界面中我们可以看到中心标记上面显示的就是我们定位的地址,下面是一个listview列表,第一条item的数据就是我们定位得到的地址,下面其余的都是我们根据定位得到的经纬度通过poi周边搜索得到的地址。我们进行了如下操作:我们点击列表的item,中心标记会移动到该item对象的地址上面去。
2017-04-12 15:45:36
5085
1
原创 NullPointerException:SwipeRefreshLayout.setColorViewAlpha(SwipeRefreshLayout.java:220)
最近因为项目改需求把一个原来不需要刷新的界面改成需要进行刷新操作的界面,首先想到的是加headview但这个做法可能导致我要手写二三十个findset方法,这个简直是折磨人,于是本人想到直接套个SwipeRefreshLayout来解决简单粗暴,于是使用过程中发现当正在加载转圈圈的过程中我返回上一级界面的时候出现NullPointerException:UncaughtException detec
2017-03-30 11:01:29
1794
原创 adapter.notifyDataSetChanged()失效解决方案
谈起这个方法我相信基本每个接触一点Android开发的都用到过,但是好多时候并不是我们使用错了,而是无意之间的写法导致我们.notifyDataSetChanged()突然失去了效果,让我们摸不着头脑,下面根据自己的使用经验总结三种解决方法。1.数据源没有更新,调用notifyDataSetChanged无效。针对这个我们可以打断点看数据源发送变化没来解决。2.adapter初始化时绑定的数据集合的
2017-03-18 11:28:58
2181
原创 Java类加载机制浅谈
Android的热修复技术在去年因为大厂们的支持和分享所以出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker,我们查阅相关资料后会发现QQ和微信的解决方案其实原理是一样的,都是基于Google推出的的Multidex方案,以ClassLoader的方式完成问题类的替换,谈到ClassLoader我们就不得不了解下Java的类加载机制了。类的加载过程 JVM将类加载
2017-02-27 14:52:27
632
原创 Android自定义view你所需要了解的
关于Android的自定义view相关的知识不管是面试还是我们深入学习都是不可避免要接触的知识模块,我们用到的一些开源控件随随便便都是上百上千行的代码,顿时让我们感觉自定义view很难,但是当我们读了类似知名博主郭霖,任玉刚一类的讲解自定义view方面的文章,我们就会感觉其实自定义view也不是很难,下面本文将会讲解这方面几个难点,希望对你们有所帮助。首先我们应该了解Android的事件分发机制,本
2017-02-20 16:08:12
518
原创 分析"今日头条"Android客户端所使用的开源技术
市场上新闻类的应用今日头条因为其优质的文章和良好的口碑,所以使用用户相当广泛,本人也是头条粉丝,呵呵。天天用着这么优秀的应用,对于一个开发者当然想了解下他们用的是什么技术,很久以前用过dex2jar、JD-GUI、apktool等反编译工具,这些工具用起来略显麻烦,一大推步骤和命令行,今天使用一款简介的工具,classyshark,现在官网最新是7.2版本,我们就使用这个来分析今日头条5.9.8这个
2017-01-14 18:35:54
3936
原创 为RecyclerView打造简单易用扩展性高的万能适配器
相信用listview开发的过程当中我们肯定用过各类万能的Adapter适配器,当我们迁移到使用Recycleview的开发中会发现虽然它的功能比listview强大不少,但是代码写起来还是略显麻烦了些,于是我们感觉也要使用一个简单易用的万能适配器来写代码,前段时候受到了一篇博客的启发,感觉实现的还是不够简洁和扩展性强,于是想到了一种封装方式,写一个万能适配器,让大家使用。 下面我们直奔主
2016-12-21 10:32:27
467
原创 教你使用Android自带注解@IntDef代替Enum (枚举)
当我们的业务需求变的多起来的时候,我们这个时候可能都需要对每个需求加上点击事件,这个时候我们经常使用枚举类来实现这种变化,举个例子常见的业务场景出现在MineFragment界面,可能出现item列表界面,当我们为它们设置item点击事件的时候,我们把所有数据封装进去bean集合里面,然后添加一个枚举类型来标识,相对于用position来标识这样的做法适应于减少业务需求不断改变带来的修改代码的繁琐。
2016-12-05 11:36:54
787
转载 RecycleView 实现复杂首页布局三种方式
做过电商类应用的朋友可能都会遇到一个比较头疼的问题:复杂的首页布局如何实现。参考百度糯米,美团,bilibili等应用,都会发现其首页的布局相对复杂,例如下图bilibili的首页(第二张是demo实现的效果图),可以看到在同一个页面中先是有列表布局出现,然后出现了2列的网格布局,接着3列的网格布局,最后还出现了瀑布流式布局: 这样的效果该怎么做呢?是使用LinearLayoutM
2016-11-21 11:58:09
1223
原创 开源项目XRecyclerView的一个bug的解决
XRecyclerView是一个对recycleview二次封装的框架,不了解的可以查看这篇文章拆解轮子之XRecyclerView,本人使用了下感觉蛮好用的,但是如何实现自动上拉刷新的操作时,由于fragment预加载的问题,会初始化附近的fragment导致没进去这个fragment就会调用这个fragment里面的onCreateView方法导致XRecyclerView设置的自动下拉刷新的操
2016-11-11 17:07:43
2281
原创 Glide 加载圆形图片CircleImageView遇到的问题
Glide是Google推荐的图片加载库,专注于流畅的滚动,它的优点我就不细说了,使用也很简便就一行代码就可以搞定图片加载和缓存,不需要像类似ImageLoader等老牌图片加载框架需要做一些初始化配置类似的操作了。 在在builde.gradle里面添加上:compile 'com.github.bumptech.glide:glide:3.5.2'Glide.with(mContext)
2016-11-11 15:59:00
3763
原创 解决Splash应用启动白屏问题
不久前项目开始了一段时间了,刚开始怀疑是Android Studio中新加入的Instant Run功能引起的,于是重新打release包后再次运行发现还是有这样的问题,突然想到了上次集成进来了云信,于是猜想可能的确是加入云信后Application里面初始化操作再加上HomeActivity主界面的一些初始化耗时操作引起的,于是我们想办法消灭白屏,有已下两种方案可参看: 1.在启动Acti
2016-10-25 10:54:11
1021
原创 抛弃Android自带webview,使用腾讯qq浏览器x5内核的webview浏览器
Android开发过程中,有些复杂界面原生实现起来比较麻烦,所以现在一般使用h5来实现,如果使用原生的webview来做的话可以在界面滑动会出现卡卡的感觉,所以我推荐大家使用腾讯x5内核,替换系统自带的webview。从目前来看,微信、手Q、空间和QQ浏览器都已经内置了X5内核,基本上所有的手机用户手机里都有QQ浏览器X5内核了。所以第三方只要通过很小的sdk就可以调用到这些app里面的X5。
2016-10-14 11:53:00
14916
原创 给RecyclerView自定义上拉,下拉刷新
使用RecyclerView越来越多了,基本可以不用listview了,但是这个新的控件谷歌官方似乎设计的没有想listview那样方便快捷,listview自带有headview和 footerview所有我们很方便的可以实现上拉,下拉刷新,但是我们使用recyclerview就没有那样的舒服了,需要自己动手来实现这两个模块了。本人参考了其他几篇博客使用了下感觉都有bug存在,于是自己改进了下,基
2016-10-09 13:12:44
1388
原创 Android Studio无法预览布局而且没有任何提示
最近遇到studio无法预览布局的情况,只要项目编译后就预览不了布局,非要重新clean一下才可以,网上查找的一系列方法都没有解决这个问题,重装好几遍都不行,最后发现应该是最开始导入以前保存的setting导致的,项目中也应该保留了缓存导致的。最后清理的c盘缓存,卸载了studio换个目录重新安装了sdk,不要再把本地的这个项目导入了,重新clone项目下来就没问题了。
2016-09-24 20:04:20
2179
转载 Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/9153761记得在前面的文章中,我带大家一起从源码的角度分析了Android中View的事件分发机制,相信阅读过的朋友对View的事件分发已经有比较深刻的理解了。还未阅读过的朋友,请先参考 Android事件分发机制完全解析,带你从源码的角度彻底理解(上) 。那么今天
2016-09-19 12:43:47
525
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人