- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 Jetpack 里面的 WorkManager
前面已经说了很多 jetpack 中的架构组件,每一种的出现都是为了更好的解决现在存在的问题,或许这些问题也有解决方案,可是千人前面,也没有一个规范而言。同样 WorkManager 也是为了解决一些问题,在做开发的时候总避免不了做些后台任务,好比我们的业务埋点的上传,正常我们起定时器也可以实现,但是一旦用户退出了应用,我们的应用到了后台,一旦遇到系统内存吃紧的情况,应用进程就会被杀掉了,遇到这种...
2020-02-07 10:47:23
1219
原创 Jetpack 里面的 Paging 和 Room
paging 主要作用就是用来加载列表数据以及加载更多也就是分页加载的,展示还是人家 recyclerview 的事儿,只不过 paging 可以把这个过程变得更加的高效。想想咱们以前加载更多怎么做的,我们需要关注到 recyclerview 或者 listview 通过他们知道用户是不是滑动到页面底部了,是不是该加载更多了,并且还需要我们自己维护加载到第几页,下次该加载哪一页,而现在呢?这一切几...
2020-02-07 10:44:35
1066
原创 LiveData 里面 Transformations 的 map 以及 switchMap
假设在一个实现了 viewmodel 的类里面有如下代码:private val queryLiveData = MutableLiveData<String>() private val repoResult: LiveData<RepoSearchResult> = Transformations.map(queryLiveData) { ...
2020-02-07 10:41:36
5802
2
原创 关于 Lifecycle,LiveData,ViewModel
1、Android Jetpack 为何出现服务端以及前端都有一些为人熟知的开发框架,比如服务端的以前的 Spring MVC 以及现在的 SpringBoot,还有前端的 Vue 等等,但是 Android 却很少出现一个广泛被大家使用的开发框架,如果非得说一个被大家用的最多的框架,那可能还就是 MVC 了,而 MVC 或许是最不是框架的框架了,因为即使用了它,代码依旧是臃肿不堪,耦合严重,...
2020-02-07 10:33:09
1374
原创 EventBus源码解析,看这篇就够了
先说下大家熟悉的EventBusEventBus使用起来特别方便简单,如果一个类需要被通知,然后做一些事情,那么只需要在这个类里面调用EventBus.getDefault().register(this);方法进行注册,其次是使用@Subscribe注解方法,那么只需要在需要发送事件的地方,调用post或者postSticky方法(参数就是被注解函数的参数类型)就可以在这个被注解的方法这里收...
2019-05-16 18:44:30
1696
1
原创 Android自定义view绘制顺序漫谈
今天就跟大家说说自定义view里面的绘制顺序问题,因为有时候避免不了在同一个地方绘制不同的view,那么就避免不了遮盖问题,这个时候就就必须考虑绘制顺序的问题了。 说到绘制顺序就不得不提onDraw和dispatchDraw这两个方法,下面我们一一来看这两个方法。 onDraw 之前我们自定义view一般都继承了View这个类,其实Android里面所有的控件也都继承自...
2018-04-28 12:02:11
1405
原创 Android自定义view之clip裁切以及几何变换
今天我们来实践下Android部分的裁切就是clip打头的方法以及一些几何矩阵变换,所谓的裁切,顾名思义就是裁剪啊,就是把一个图形按照另外一个图形切成我们想要的样子,例如我们想把一张图片裁剪为圆形或者矩形或者五角星等等我们想要的形状。而矩阵变换是怎么回事呢?矩阵变换就是进行图形的平移啊、缩放啊、旋转啊,或者在某个方向上拉伸形状啊,这类的操作。 裁切部分 clipRect...
2018-04-27 16:25:13
3031
1
原创 Android自定义view之自己真正意义上的自定义view
之前的自定义view文章也写了几篇了,但是也一直是局限于搞懂系统API如何使用等,还是没有真正的实践过,今天这篇文章算是自己真正意义上的第一次自定义view,就是做了一个常见的尺子效果的半成品(不要打我),毕竟有些东西还是不那么会,以后肯定会完善的,由于手势触摸部分还不是那么会,所以我就直接用了动画来做尺子的滑动效果了,请见谅。 下面先看效果图:上面的绿线所在位置,就是当前刻...
2018-04-23 11:29:53
476
原创 Android自定义view之PathEffect实践
今天我们来看看paint里面的PathEffect,还是先来看看PathEffect是什么:“PathEffect is the base class for objects in the Paint that affect the geometry of a drawing primitive before it is transformed by the canvas' matr...
2018-04-04 14:40:24
485
原创 Android自定义view之paint.setShader()方法
前面两篇我们讲了canvas的一些方法,今天我们来看下paint的setShader方法。 那么shader是什么呢?听听android怎么说:“Shader is the based class for objects that return horizontal spans of colors during drawing. A subclass of Shader is...
2018-03-30 16:43:48
6870
1
原创 Android自定义view之基础canvas.drawPath方法
之前一篇我们主要了解实践了canvas的drawXXX方法,都是绘制一些很规矩的图形,例如圆形、矩形、直线、画点、画椭圆、绘制圆角矩形、绘制扇形、绘制弧线这些,大家也肯定发现了这些都是规规矩矩图形,那么如果要画一条折线,画一个三角形之类的自定义图形,该怎么办呢?这时候就改path出场了,对于canvas就是drawPath了。 那么path是什么呢?听听Android怎么...
2018-03-29 20:24:40
7416
原创 Android自定义view之基础canvas.drawXXX方法
做Android不知不觉也有些年头了,但是对于自定义view却没有真正的好好研究或者实践过,可能是好用的库太多,自己就不想去想着自己去实现一些效果,不过别人的终究是别人的,毕竟“纸上得来终觉浅,绝知此事要躬行”,所以最近就花了些时间从最基础的开始实践,以此博客做一些记录。 说起自定义view大家肯定首先想到的就是canvas和paint,canvas大家一般都直译为“...
2018-03-27 15:25:26
858
原创 python中的推导式
python这门语言给我的感觉之一就是高效,往往能够用几行代码就实现别的语言要写好多行代码才能够实现的功能,那么推导式就是我见过的很简便的一种方式,且在别的语言中没有见到过(也主要是因为自己学习的语言没有辣么多,哈哈)。 python中常用的推导式有列表推导式以及字典推导式,接下来我们一一来看推导式神奇的地方。 首先我们来看列表推导式,好比我们现在有一个这样子的需求...
2018-03-24 20:27:49
398
原创 python中高阶函数之filter(),reduce(),map()的使用
学习python大家都知道,python有形形色色的库能给我们的开发工作带来很大的方便,同样也有一些函数如果用起来也能够大大的提高我们的效率,这次我们就来认识一下python的几个高阶函数。filter(function_or_none, sequence)函数 :顾名思义就是起到一个过滤作用,它的作用就是会对你传入其中的数组的元素按照特定的函数处理后再返回一个数组,这个处理的函数...
2018-03-22 14:29:30
360
原创 依赖库版本不一致导致的问题的解决思路
我们在写代码时候总会借鉴一些第三方库,有的是别人写的比较优秀的,有的则是google官方提供的,但是我们在依赖之后编译运行时候总会出各种各样的问题,究竟是怎么回事呢? 前两天自己遇到了这么一个问题,编译时候报错如下:“Error:Execution failed for task ':app:preDebugBuild'.> Android dependency 'c...
2018-03-18 15:16:55
10517
3
原创 自己实现floatactionbutton展开折叠功能
之前总会见到那种功能,好比屏幕右下角有个按钮,点击之后向上弹出一个菜单按钮,然后点击菜单按钮会实现自己的业务同时这些菜单会收起到左下角。github上面有个关于这个功能实现的库,但是最近自己想要实现这样的功能,其实实现这个功能最主要的就是动画的应用了。 我们看到那种效果都是点击一个按钮之后,别的菜单按钮从其底部依次弹出,但是又不是绝对的一个接着一个的弹出,而是有一定的时差的,然
2017-12-24 22:14:54
2329
原创 用python学习抓取借鉴取豆瓣电影top250
今天给大家带来的是用最近学习的python抓取豆瓣上面的top250电影,具体是将电影的title、电影描述(就是导演呀之类的是谁)、电影封面图片、电影的星级、电影评价数目以及电影的一句影评抓取下来,然后再控制台有格式的打印出来。 已经明确了要做的事情,接下来就考虑怎么来做这件事情了,第一步是打开豆瓣电影top250 这个页面,第二步骤是分析网页源代码,找到我们需要爬取的信息
2017-11-25 14:40:13
4313
原创 android 8.0 应用启动崩溃?
android8.0正式版已经出了几个月了,当然国内手机如果要升级到8.0可能还需要些时日。但是我们有模拟器呀,所以就想让自己的应用在8.0的系统上面跑一下,前提是得将应用的targetSdkVersion改为27了,否则的话一些8.0的要求不会对app起作用。 然后就下载了一个android 8.0 系统的模拟器,像往常一样子开始运行了,但是已启动就crash了,oh my
2017-11-18 16:16:57
20162
2
原创 python之折线图绘制体验
上一篇“python之初体验”中我们主要是实现了抓取csdn本人人博客列表页面的每一篇博客的阅读数量和标题功能,后来就像我们是有了数量和title,可是我还想知道我的每篇阅读数量和日期之间的关系就好了,以及每篇博客的阅读趋势,说到关系和趋势可能再多的语言都显得苍白无力了,所以图表可能是最好的一种方式,今天要实现的功能就是在python中通过绘制折线图来表名日期和阅读数量的关系。
2017-11-05 21:46:08
3642
1
原创 android studio升级到3.0之后的一些配置变化
上周android 3.0稳定版终于面世,自己也是更新了一波。但是这次的版本算是一个大版本了,直接从2.3.3到了3.0。所以跟之前升级相比也有很多配置方面的变化,现在记录如下。 1、升级完成之后首先是会提示升级gradle插件到3.0.0,而gradle版本升级到4.1,如下图所示: 直接点击update就好了,其实这里修改的是两个地方,一个是project目录下的gr
2017-10-29 17:47:40
2832
原创 关于推送push中notification的一点问题
对于推送,一般的APP都会有这种功能,这是一种拉回用户,使其重新用我们APP增强用户粘性的一种方法,所以这也是一种很常见的功能。但是之前一直没注意 ,所以也忽略了一些问题,最近正好碰到了,记录下来,防止大家再次踩坑。 因为最近的业务场景的需要,一个用户会在很短的时间内收到比较多的推送,但是在之前的应用中,其实这种业务场景不会那么多的。但是现在出现了,也出现了两个问题。那么出现的
2017-10-12 21:26:38
2382
原创 CoordinatorLayout中设置layout_behavior的布局无法垂直居中问题解决
这两天项目中需要实现一个页面,大致的布局是顶部一块区域是一部分内容,然后下面是一个title条,这个title条下面是一个列表,因为列表的数据可能有很多,所以这个页面是需要整体进行滑动的,因为只让下面的listview滚动的话,那么下面的展示区域就太小了,因为我们的listview的Item内容也比较多,但是说如果是scrollview嵌套listview,那么那个title条也会被滚动出屏幕,但
2017-09-22 22:11:49
2646
原创 base64编码之去除特殊字符
这些天h5需要做一个推广页面,需要客户端将地理位置信息以及用户的一些信息传递给h5页面,一般的话可以通过给h5注入对象,调用方法的方式来实现。但是想想这个页面是需要通过客户端生成二维码,别的用户用微信或者其他的二维码扫描工具扫描之后才出现的,所以不是通过自己客户端的webview来加载的,所以说这种方式不可行,那么就另外一种方式,就是在h5页面地址后面进行拼接,然后让h5取值,就是采用了这个方案。
2017-09-18 20:16:57
32053
原创 Python之初体验
最近python是越来越火了,自己也是想体验一把,所以就抽时间把python基础语法什么的都了解了下,也把具体的代码试了试。看完了想着总要应用下吧,否则总感觉没劲儿,就跟没学似得,毕竟实践是最好的老师嘛。那么实现个什么功能呢?然后就看到了博客,要不就把所有博客的标题以及阅读次数统计下吧,也算是网络爬虫吧,哈哈哈。 确定了,就想想大致要怎么做吧。我们的基本步骤也是首先先看下需要获取
2017-09-12 23:33:28
500
原创 自定义Linearlayout,实现dividerPaddingLeft和dividerPaddingRight
在项目中经常会用到分割线,很多应用的“我的”模块,都会用到分割线,那么怎么优雅的实现这种很简单的效果呢? 实现它一般最简单最麻烦的方法可能就是Linearlayout然后里面每个子view之间用一个view,然后设置背景,然后高度设置为1px了,其实,最初我也这么搞过,但是效率实在是低呀,后来知道了Linearlayout自己就有实现分割线的属性了,就是一个divider属性,
2017-08-14 22:47:35
2565
原创 react native初尝试
这两天项目刚上完线,然后就想撸一把react native,大家或多或少都听说过它。刚刚终于是在android模拟器上跑了起来,看到了页面(刚刚的心情很是开心,哈哈哈),中间也遇到了一些问题,记录下来。 学习的话,现在是去react native 中文档,点击首页下面的“开始使用React Native”,就会进入环境搭建页面,它会让你选择目标平台就是Android或者iOS了
2017-08-09 23:49:46
623
原创 CountDownTimer倒计时
短信验证码倒计时是一个在app端再常见不过的功能了,要实现倒计时,写法有很多,有用handler来做的,也有用timer来做的,当然现在的Rxjava里面的Observable的interval方法也可以做这样子的事情,后来会发现其实android已经给了一个很适合做倒计时的控件CountDownTimer; 看下官方的解释: Schedule a countdown u
2017-07-27 23:00:38
469
原创 关于okhttp下载文件的一点发现
上一个项目用的是retrofit做的网络请求,所以自然升级时候下载apk时候,也是用的retrofit。但是这个项目是接手了别人写了一部分的项目,所以网络请求就沿用了之前的okhttp了。但是再用它下载文件apk时候发现了一点问题,不知道是自己用的不对,还是怎么了,但是还是通过一些方法解决了。 遇到的问题就是如何判断下载结束了。在原来用retrofit和Rxjava时候,下载
2017-07-13 20:42:21
2608
原创 draw9patch.bat去哪里了?
最近项目中要用到.9图片,就想着用sdk里面的工具制作一张,然后就像往常一样子,去sdk的tools目录下面找draw9patch.bat文件,但是这次没找到,真的没找到,看到如下结果了:就是木有,那个文件啊,那怎么制作.9图片啊,难道android不让做.9图片了,这个肯定是不可能的呀。记得之前是有的,现在没有,肯定是我升级sdk之后,没了,反正不是我删除的,哈哈哈。 虽然
2017-05-28 20:19:32
24193
原创 android将library发布至jcenter的趟坑之路
最近接手了一个sdk的任务,虽然原有任务已经比较多了,哈哈哈。一般sdk让别人用可以打成jar包,但是如果是有资源文件的就不行了,就可能需要打成aar包让别人依赖了,但是这有个不好的地方每次自己的sdk有更新,还得让被人更换aar包,颇显麻烦啊,所以最终还是需要将其发布至一个地方让别人一行代码引用,还是很方便。 其实也是参考了鸿洋大神的http://blog.youkuaiyun.com
2017-04-09 22:41:11
3888
原创 小米手机调试出现DELETE_FAILED_INTERNAL_ERROR错误
这些天还是需要服务端和客户端一块搞,略微微有点忙。可用小米手机调试时候它又掉链子了(其实,我昨天就想写这个问题了)。 症状就是我在android studio run之后总提示我已经安装了一个应用,需要卸载,我点击ok,卸载了,还是装不上去,看到控制台输DELETE_FAILED_INTERNAL_ERROR和Error while installing APKs的
2017-03-07 10:03:59
28520
28
原创 由contenttype引发的一次小错误
最近项目依然是在写服务端了,最近有写到服务端提供接口给客户端让其调用。 正如大家所知,我们一般在和服务器交互时候,所有的接口请求都会定义一个统一的规范,一般都是同一个实体,例如下面的一个类public class GeneralRequestVo implements Serializable{ private static final long seria
2017-01-17 18:51:47
960
原创 服务端小白利用spring boot搭建项目
最近公司做了一些调整,我们服务端的去做了别的项目。我们本身也需要做新项目,但是服务端也不能停,所以我们做客户端的就需要顶上去了。
2017-01-11 18:33:10
1855
1
原创 小米手机调试总出现“INSTALL_CANCELED_BY_USER”
因为最近我的测试机酷派大神手机总是无法usb连接到电脑,所以我今天就用陪我走过漫长岁月的小米2s手机进行调试。开机后,提示我升级系统,那我就升级呗。 升级完成后,我就跟往常一样,就连上手机,在android studio里面run,然后选择设备,然后就等着安装至手机。可是出现了下面的一幕,请看图: 人家android studio提示我,安装被用户取消了,
2017-01-05 18:54:12
35698
18
原创 关于Eventbus使用过程中的一点点发现
项目中在apk升级部分用了retrofit,同时大家也都知道,如果需要监听到下载的进度,那么必须是对okhttpclient添加addInterceptor了,我们会定义一些接口,然后通过接口将下在的字节数回调至业务层。同时我们也知道接口回调到的线程是子线程。但是我又不想写handler将进度发送出去了,因为感觉用handler太重了。然后我就用了eventbus,感觉轻量些。
2016-12-31 11:17:39
3398
原创 listview嵌套listview,子listview中有换行的textview展示有问题,肿么办?
这些天遇到一个问题,就是我有个界面因为业务的需要,就必须做成listview嵌套listview,然后被嵌套的listview的Item里面有textview,刚开始也没什么,后来突然有条数据的字符串特别长,然后子listview的Item的textview就换行了,然后,然后你们懂得,子listview就显示异常了呀,内容就不能完全展示了。 其实google也是不推荐可以滚
2016-12-17 11:16:56
1235
原创 让“提交”按钮状态跟随edittext以及checkbox等的状态实时变化
现在很多应用在对于提交按钮是否可以点击的判断都是随着用户输入的内容或者勾选的状态而变化的,应该很少有人会如果用户在界面上没有任何输入的时候就让其开始点击按钮吧。这样做首先是增加了用户无畏的操作。另外也是会增加代码很多的非空判断。实在是不划算。所以才会有这种如有该输入的,该选择的没有任何勾选,那么提交按钮就不点亮,不可以点击这样的设计了。 好,其实今天跟大家说的就是自己现在在用的
2016-12-14 21:17:35
1155
原创 replace和replaceAll的一点发现
今天ui设计师小妹,在矫正ui。突然对我说,嘿,你这调数据怎么间距这么大。我一看不对呀,就是一个Recyclerview,然后每个Item理论上是一致的呀。怎么就这条数据跟别人不一样呢?然后,我就看了看数据,果然服务器返回数据中带了一个特殊的符号,那就是\r\n.哎呀,妈呀,换行符号。怪不得我的那个Item跟下面间距多了一行。 好的,问题定位了,就是服务器返回多了一个换行符号
2016-12-12 22:34:05
1073
原创 关于视频录制的一些尝试
最近项目中有用到视频录制的功能,所以就有了一番探索。下面将遇到的一些问题以及解决办法记录下来。 其实,我们项目中的视频录制是高仿微信朋友圈小视频的(我不会告诉你,ui设计师就告诉我们让我们参照微信小视频录制来做)。大家都知道微信小视频录制时竖屏录制的,且比例很协调。那么视频录制就分为录制之前的预览界面,以及开始录制时候的录制页面了。所以竖屏录制关键就在于这两个页面的宽高设
2016-12-11 15:08:13
936
原创 MediaMetadataRetriever小试牛刀
最近项目有用到音视频的录制,那么自然也是有获取录制的音视频时长的需求,同时也会有获取网络视频时长的需求了。 其实说来获取录制时长的话,完全可以不从文件本身入手了。可以放个计时器。不过这样子也是大动干戈了,也太不灵活了。然后就遇到了今天的主角了:MediaMetadataRetriever。看google对于这个类的描述MediaMetadataRetriever class
2016-12-09 11:44:02
9496
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人