![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android小日子记录
文章平均质量分 70
和小胖
勇于尝试,just do it。
展开
-
Jetpack 里面的 WorkManager
前面已经说了很多 jetpack 中的架构组件,每一种的出现都是为了更好的解决现在存在的问题,或许这些问题也有解决方案,可是千人前面,也没有一个规范而言。同样 WorkManager 也是为了解决一些问题,在做开发的时候总避免不了做些后台任务,好比我们的业务埋点的上传,正常我们起定时器也可以实现,但是一旦用户退出了应用,我们的应用到了后台,一旦遇到系统内存吃紧的情况,应用进程就会被杀掉了,遇到这种...原创 2020-02-07 10:47:23 · 1168 阅读 · 0 评论 -
Jetpack 里面的 Paging 和 Room
paging 主要作用就是用来加载列表数据以及加载更多也就是分页加载的,展示还是人家 recyclerview 的事儿,只不过 paging 可以把这个过程变得更加的高效。想想咱们以前加载更多怎么做的,我们需要关注到 recyclerview 或者 listview 通过他们知道用户是不是滑动到页面底部了,是不是该加载更多了,并且还需要我们自己维护加载到第几页,下次该加载哪一页,而现在呢?这一切几...原创 2020-02-07 10:44:35 · 1025 阅读 · 0 评论 -
LiveData 里面 Transformations 的 map 以及 switchMap
假设在一个实现了 viewmodel 的类里面有如下代码:private val queryLiveData = MutableLiveData<String>() private val repoResult: LiveData<RepoSearchResult> = Transformations.map(queryLiveData) { ...原创 2020-02-07 10:41:36 · 5709 阅读 · 2 评论 -
关于 Lifecycle,LiveData,ViewModel
1、Android Jetpack 为何出现服务端以及前端都有一些为人熟知的开发框架,比如服务端的以前的 Spring MVC 以及现在的 SpringBoot,还有前端的 Vue 等等,但是 Android 却很少出现一个广泛被大家使用的开发框架,如果非得说一个被大家用的最多的框架,那可能还就是 MVC 了,而 MVC 或许是最不是框架的框架了,因为即使用了它,代码依旧是臃肿不堪,耦合严重,...原创 2020-02-07 10:33:09 · 1319 阅读 · 0 评论 -
Android自定义view之基础canvas.drawPath方法
之前一篇我们主要了解实践了canvas的drawXXX方法,都是绘制一些很规矩的图形,例如圆形、矩形、直线、画点、画椭圆、绘制圆角矩形、绘制扇形、绘制弧线这些,大家也肯定发现了这些都是规规矩矩图形,那么如果要画一条折线,画一个三角形之类的自定义图形,该怎么办呢?这时候就改path出场了,对于canvas就是drawPath了。 那么path是什么呢?听听Android怎么...原创 2018-03-29 20:24:40 · 7326 阅读 · 0 评论 -
依赖库版本不一致导致的问题的解决思路
我们在写代码时候总会借鉴一些第三方库,有的是别人写的比较优秀的,有的则是google官方提供的,但是我们在依赖之后编译运行时候总会出各种各样的问题,究竟是怎么回事呢? 前两天自己遇到了这么一个问题,编译时候报错如下:“Error:Execution failed for task ':app:preDebugBuild'.> Android dependency 'c...原创 2018-03-18 15:16:55 · 10379 阅读 · 3 评论 -
自己实现floatactionbutton展开折叠功能
之前总会见到那种功能,好比屏幕右下角有个按钮,点击之后向上弹出一个菜单按钮,然后点击菜单按钮会实现自己的业务同时这些菜单会收起到左下角。github上面有个关于这个功能实现的库,但是最近自己想要实现这样的功能,其实实现这个功能最主要的就是动画的应用了。 我们看到那种效果都是点击一个按钮之后,别的菜单按钮从其底部依次弹出,但是又不是绝对的一个接着一个的弹出,而是有一定的时差的,然原创 2017-12-24 22:14:54 · 2270 阅读 · 0 评论 -
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 · 20042 阅读 · 1 评论 -
关于推送push中notification的一点问题
对于推送,一般的APP都会有这种功能,这是一种拉回用户,使其重新用我们APP增强用户粘性的一种方法,所以这也是一种很常见的功能。但是之前一直没注意 ,所以也忽略了一些问题,最近正好碰到了,记录下来,防止大家再次踩坑。 因为最近的业务场景的需要,一个用户会在很短的时间内收到比较多的推送,但是在之前的应用中,其实这种业务场景不会那么多的。但是现在出现了,也出现了两个问题。那么出现的原创 2017-10-12 21:26:38 · 2310 阅读 · 0 评论 -
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 · 6799 阅读 · 1 评论 -
Android自定义view之基础canvas.drawXXX方法
做Android不知不觉也有些年头了,但是对于自定义view却没有真正的好好研究或者实践过,可能是好用的库太多,自己就不想去想着自己去实现一些效果,不过别人的终究是别人的,毕竟“纸上得来终觉浅,绝知此事要躬行”,所以最近就花了些时间从最基础的开始实践,以此博客做一些记录。 说起自定义view大家肯定首先想到的就是canvas和paint,canvas大家一般都直译为“...原创 2018-03-27 15:25:26 · 795 阅读 · 0 评论 -
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 · 443 阅读 · 0 评论 -
Android自定义view之自己真正意义上的自定义view
之前的自定义view文章也写了几篇了,但是也一直是局限于搞懂系统API如何使用等,还是没有真正的实践过,今天这篇文章算是自己真正意义上的第一次自定义view,就是做了一个常见的尺子效果的半成品(不要打我),毕竟有些东西还是不那么会,以后肯定会完善的,由于手势触摸部分还不是那么会,所以我就直接用了动画来做尺子的滑动效果了,请见谅。 下面先看效果图:上面的绿线所在位置,就是当前刻...原创 2018-04-23 11:29:53 · 439 阅读 · 0 评论 -
Android自定义view之clip裁切以及几何变换
今天我们来实践下Android部分的裁切就是clip打头的方法以及一些几何矩阵变换,所谓的裁切,顾名思义就是裁剪啊,就是把一个图形按照另外一个图形切成我们想要的样子,例如我们想把一张图片裁剪为圆形或者矩形或者五角星等等我们想要的形状。而矩阵变换是怎么回事呢?矩阵变换就是进行图形的平移啊、缩放啊、旋转啊,或者在某个方向上拉伸形状啊,这类的操作。 裁切部分 clipRect...原创 2018-04-27 16:25:13 · 2951 阅读 · 2 评论 -
Android自定义view绘制顺序漫谈
今天就跟大家说说自定义view里面的绘制顺序问题,因为有时候避免不了在同一个地方绘制不同的view,那么就避免不了遮盖问题,这个时候就就必须考虑绘制顺序的问题了。 说到绘制顺序就不得不提onDraw和dispatchDraw这两个方法,下面我们一一来看这两个方法。 onDraw 之前我们自定义view一般都继承了View这个类,其实Android里面所有的控件也都继承自...原创 2018-04-28 12:02:11 · 1368 阅读 · 0 评论 -
EventBus源码解析,看这篇就够了
先说下大家熟悉的EventBusEventBus使用起来特别方便简单,如果一个类需要被通知,然后做一些事情,那么只需要在这个类里面调用EventBus.getDefault().register(this);方法进行注册,其次是使用@Subscribe注解方法,那么只需要在需要发送事件的地方,调用post或者postSticky方法(参数就是被注解函数的参数类型)就可以在这个被注解的方法这里收...原创 2019-05-16 18:44:30 · 1623 阅读 · 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 · 2778 阅读 · 0 评论 -
自定义Linearlayout,实现dividerPaddingLeft和dividerPaddingRight
在项目中经常会用到分割线,很多应用的“我的”模块,都会用到分割线,那么怎么优雅的实现这种很简单的效果呢? 实现它一般最简单最麻烦的方法可能就是Linearlayout然后里面每个子view之间用一个view,然后设置背景,然后高度设置为1px了,其实,最初我也这么搞过,但是效率实在是低呀,后来知道了Linearlayout自己就有实现分割线的属性了,就是一个divider属性,原创 2017-08-14 22:47:35 · 2503 阅读 · 0 评论 -
listview嵌套listview,子listview中有换行的textview展示有问题,肿么办?
这些天遇到一个问题,就是我有个界面因为业务的需要,就必须做成listview嵌套listview,然后被嵌套的listview的Item里面有textview,刚开始也没什么,后来突然有条数据的字符串特别长,然后子listview的Item的textview就换行了,然后,然后你们懂得,子listview就显示异常了呀,内容就不能完全展示了。 其实google也是不推荐可以滚原创 2016-12-17 11:16:56 · 1189 阅读 · 0 评论 -
关于视频录制的一些尝试
最近项目中有用到视频录制的功能,所以就有了一番探索。下面将遇到的一些问题以及解决办法记录下来。 其实,我们项目中的视频录制是高仿微信朋友圈小视频的(我不会告诉你,ui设计师就告诉我们让我们参照微信小视频录制来做)。大家都知道微信小视频录制时竖屏录制的,且比例很协调。那么视频录制就分为录制之前的预览界面,以及开始录制时候的录制页面了。所以竖屏录制关键就在于这两个页面的宽高设原创 2016-12-11 15:08:13 · 874 阅读 · 0 评论 -
MediaMetadataRetriever小试牛刀
最近项目有用到音视频的录制,那么自然也是有获取录制的音视频时长的需求,同时也会有获取网络视频时长的需求了。 其实说来获取录制时长的话,完全可以不从文件本身入手了。可以放个计时器。不过这样子也是大动干戈了,也太不灵活了。然后就遇到了今天的主角了:MediaMetadataRetriever。看google对于这个类的描述MediaMetadataRetriever class原创 2016-12-09 11:44:02 · 9442 阅读 · 7 评论 -
七牛云文件上传
最近做的项目需要上传音视频以及图片,刚开始时候是用retrofit上传,说实话,那叫一个简单和爽啊,必须得赞一个。只需要只需要将File往里面一放就ok了。哦哦,貌似有点跑题了。我应该说七牛云上传文件的。哈哈哈(这与足以说明retrofit上传是多么的便利了)。既然retrofit这么的方便简单,还是要用七牛云呢?因为服务端害怕将来用户量大了,读写文件了,服务器压力太大,万一搞瘫了肿么办?所以就选原创 2016-12-03 10:09:07 · 5404 阅读 · 0 评论 -
环信android sdk接入的过程
最近项目中要用到群聊的功能,了解过后最终用了环信来实现此功能,下面来说具体的集成步骤; 第一步:首先至环信官网,http://www.easemob.com/product/cs?utm_source=baidu-pp注册后创建应用获取appKey,在申请key的过程中,发现它不像其他的第三方一样需要用到应用的唯一标识报名,所以这个key并不是和应用绑定的,别人拿去也可以直接用原创 2016-12-01 18:16:06 · 3728 阅读 · 2 评论 -
让“提交”按钮状态跟随edittext以及checkbox等的状态实时变化
现在很多应用在对于提交按钮是否可以点击的判断都是随着用户输入的内容或者勾选的状态而变化的,应该很少有人会如果用户在界面上没有任何输入的时候就让其开始点击按钮吧。这样做首先是增加了用户无畏的操作。另外也是会增加代码很多的非空判断。实在是不划算。所以才会有这种如有该输入的,该选择的没有任何勾选,那么提交按钮就不点亮,不可以点击这样的设计了。 好,其实今天跟大家说的就是自己现在在用的原创 2016-12-14 21:17:35 · 1129 阅读 · 0 评论 -
replace和replaceAll的一点发现
今天ui设计师小妹,在矫正ui。突然对我说,嘿,你这调数据怎么间距这么大。我一看不对呀,就是一个Recyclerview,然后每个Item理论上是一致的呀。怎么就这条数据跟别人不一样呢?然后,我就看了看数据,果然服务器返回数据中带了一个特殊的符号,那就是\r\n.哎呀,妈呀,换行符号。怪不得我的那个Item跟下面间距多了一行。 好的,问题定位了,就是服务器返回多了一个换行符号原创 2016-12-12 22:34:05 · 993 阅读 · 0 评论 -
小米手机调试总出现“INSTALL_CANCELED_BY_USER”
因为最近我的测试机酷派大神手机总是无法usb连接到电脑,所以我今天就用陪我走过漫长岁月的小米2s手机进行调试。开机后,提示我升级系统,那我就升级呗。 升级完成后,我就跟往常一样,就连上手机,在android studio里面run,然后选择设备,然后就等着安装至手机。可是出现了下面的一幕,请看图: 人家android studio提示我,安装被用户取消了,原创 2017-01-05 18:54:12 · 35246 阅读 · 24 评论 -
小米手机调试出现DELETE_FAILED_INTERNAL_ERROR错误
这些天还是需要服务端和客户端一块搞,略微微有点忙。可用小米手机调试时候它又掉链子了(其实,我昨天就想写这个问题了)。 症状就是我在android studio run之后总提示我已经安装了一个应用,需要卸载,我点击ok,卸载了,还是装不上去,看到控制台输DELETE_FAILED_INTERNAL_ERROR和Error while installing APKs的原创 2017-03-07 10:03:59 · 28394 阅读 · 28 评论 -
android将library发布至jcenter的趟坑之路
最近接手了一个sdk的任务,虽然原有任务已经比较多了,哈哈哈。一般sdk让别人用可以打成jar包,但是如果是有资源文件的就不行了,就可能需要打成aar包让别人依赖了,但是这有个不好的地方每次自己的sdk有更新,还得让被人更换aar包,颇显麻烦啊,所以最终还是需要将其发布至一个地方让别人一行代码引用,还是很方便。 其实也是参考了鸿洋大神的http://blog.csdn.net原创 2017-04-09 22:41:11 · 3854 阅读 · 1 评论 -
draw9patch.bat去哪里了?
最近项目中要用到.9图片,就想着用sdk里面的工具制作一张,然后就像往常一样子,去sdk的tools目录下面找draw9patch.bat文件,但是这次没找到,真的没找到,看到如下结果了:就是木有,那个文件啊,那怎么制作.9图片啊,难道android不让做.9图片了,这个肯定是不可能的呀。记得之前是有的,现在没有,肯定是我升级sdk之后,没了,反正不是我删除的,哈哈哈。 虽然原创 2017-05-28 20:19:32 · 24119 阅读 · 5 评论 -
关于okhttp下载文件的一点发现
上一个项目用的是retrofit做的网络请求,所以自然升级时候下载apk时候,也是用的retrofit。但是这个项目是接手了别人写了一部分的项目,所以网络请求就沿用了之前的okhttp了。但是再用它下载文件apk时候发现了一点问题,不知道是自己用的不对,还是怎么了,但是还是通过一些方法解决了。 遇到的问题就是如何判断下载结束了。在原来用retrofit和Rxjava时候,下载原创 2017-07-13 20:42:21 · 2555 阅读 · 0 评论 -
CountDownTimer倒计时
短信验证码倒计时是一个在app端再常见不过的功能了,要实现倒计时,写法有很多,有用handler来做的,也有用timer来做的,当然现在的Rxjava里面的Observable的interval方法也可以做这样子的事情,后来会发现其实android已经给了一个很适合做倒计时的控件CountDownTimer; 看下官方的解释: Schedule a countdown u原创 2017-07-27 23:00:38 · 428 阅读 · 0 评论 -
CoordinatorLayout中设置layout_behavior的布局无法垂直居中问题解决
这两天项目中需要实现一个页面,大致的布局是顶部一块区域是一部分内容,然后下面是一个title条,这个title条下面是一个列表,因为列表的数据可能有很多,所以这个页面是需要整体进行滑动的,因为只让下面的listview滚动的话,那么下面的展示区域就太小了,因为我们的listview的Item内容也比较多,但是说如果是scrollview嵌套listview,那么那个title条也会被滚动出屏幕,但原创 2017-09-22 22:11:49 · 2578 阅读 · 4 评论 -
base64编码之去除特殊字符
这些天h5需要做一个推广页面,需要客户端将地理位置信息以及用户的一些信息传递给h5页面,一般的话可以通过给h5注入对象,调用方法的方式来实现。但是想想这个页面是需要通过客户端生成二维码,别的用户用微信或者其他的二维码扫描工具扫描之后才出现的,所以不是通过自己客户端的webview来加载的,所以说这种方式不可行,那么就另外一种方式,就是在h5页面地址后面进行拼接,然后让h5取值,就是采用了这个方案。原创 2017-09-18 20:16:57 · 31726 阅读 · 2 评论 -
关于Eventbus使用过程中的一点点发现
项目中在apk升级部分用了retrofit,同时大家也都知道,如果需要监听到下载的进度,那么必须是对okhttpclient添加addInterceptor了,我们会定义一些接口,然后通过接口将下在的字节数回调至业务层。同时我们也知道接口回调到的线程是子线程。但是我又不想写handler将进度发送出去了,因为感觉用handler太重了。然后我就用了eventbus,感觉轻量些。原创 2016-12-31 11:17:39 · 3367 阅读 · 0 评论