
日常开发
文章平均质量分 81
记录日常遇到的一些小问题,点滴积累。
petterp
无限进步
展开
-
从0开发Android记账APP,基于Navigation的单Activity架构开发。
众所周知,Android平台的记账软件众多,但大多数都冗余着广告,复杂,VIP等等,因为公司都要生存,而小而美的APP为了活下来,也逐渐会向这方面发展。也许只有个人开发者才会去写简洁,高效的记账APP吧。为什么要写这样一个APP?得益于女朋友的碎碎念,于是决定将毕设方向转向 记账 方向。宁小记,一个简洁高效的Android记账APP(仿钱迹),开源地址这里首先感谢 钱迹 开发者—首...原创 2019-08-29 11:18:11 · 2079 阅读 · 2 评论 -
Android事件分发全面解析(基础篇)-夯实基础
这是一个老生常谈的话题了,也是一个初级开发者必须掌握的技能,但有多少人真正明白呢,穷实基础,方能长远。本文不过多涉及基础性问题,建议有点了解再来阅读,或者直接硬干。首先,事件分发对象是谁?事件。当用户触摸屏幕时( View 或 ViewGroup 派生的控件),将产生点击事件(Touch事件)Touch事件相关细节,比如触摸位置,时间,手势等等,会被封装成 MotionEven...原创 2019-07-02 18:10:57 · 534 阅读 · 0 评论 -
Android事件分发全面解析(源码篇)-夯实基础
有了前一篇的概念及Demo的亲自体验,那么接下来我们从源码出发,知根知底,看一下究竟。Android中事件分发顺序:Activity(Window) -> ViewGroup -> View其中:super: 调用父类方法;true:消费事件,即事件不继续向下传递;false:不消费事件所以,我们的重心也就是 Activity的分发机制,ViewGroup 的分发机制...原创 2019-07-02 19:13:47 · 449 阅读 · 0 评论 -
记一次inline使用不当导致编译期Null指针的排查过程
起因周五的一个下午,我哼着小曲和往常一样合完代码。准备运行试试看,结果build时发现了这样一个异常。InlineParameterChecker NullPointerException一般对于这种编译期间的异常,原因往往并不是很容易能快速定位,因为往往都是业务代码出现的问题,如果某次合并更改很多,比如我这一次,重构了底层的某个组件,所以直接当场裂开????。于是接下来整个任务都变成了如何找到 错误的 代码处。先说结论当方法添加了 inline 修饰后,即也就是内联之后,如果方法参数是一个函原创 2021-08-15 16:38:34 · 380 阅读 · 0 评论 -
ViewPager2实现内部Item的动态滚动
需求决定起因最近接到了一个需求,大概类似如下图所示的一个样式(省略了部分细节,不影响大概)。我们这是一个视频播放页+详情页,考虑到简单快捷,就想到了一个 ViewPager2 就可以实现,简单又快捷,为自己点赞。一想到如此easy,瞬时笑出了猪叫。当然RecyclerView也可以,用一个仿抖音的那种 LayoutManager 就行,但是为什么不呢,因为涉及到了视频播放,手动去处理一些生命周期和懒加载,总是非常麻烦,而且ViewPager2本身就是基于 RecyclerView ,所以何乐而不为呢。原创 2021-01-23 13:58:30 · 1794 阅读 · 4 评论 -
Gradle | allprojects ,根 repositories 区别是什么?
开发良久一直不是很明白(说白了还是懒),上述的关系到底是什么区别,于是就没太注意,直到 Jenkins打包时发现(本地打包没遇到过):找不到 fragment-ktx:1.2.4 这个依赖,而且离奇的是,它居然去 fabric 的仓库底下去找,这就很离奇。一顿思考,先是尝试更改优先级也无济于事,最后狠心删除了爱彼迎仓库,换成了优先阿里云依赖,于是解决了这个比较 简单 的问题。maven { url "http://maven.aliyun.com/nexus/content/groups/public原创 2020-12-09 21:00:25 · 1628 阅读 · 0 评论 -
Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory‘ which is a supertype of ‘com.e
Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory’ which is a supertype of ‘com.example.a19.MainActivity’. Check your module classpath for missing or conflicting dependencies今天创建了个项目,突然出现了这样的问题,怎么处理都没用,网上找了一堆没发现答案,故此记录。增加这个依赖到你的build即原创 2020-09-11 17:41:16 · 5258 阅读 · 1 评论 -
解决Android WebVIew中视频播放前出现的灰色三角形播放图标
最近在开发中,发现WebView中播放视频时,会出现灰色的播放图标,如图:解决办法如下:重写 WebChromeClient 类中的 getDefaultVideoPoster 方法,返回一个透明的bitmap.getDefaultVideoPoster不播放时,视频元素由“海报”图像表示。可以通过* HTML中视频标签的poster属性指定要使用的图片。如果该属性不存在,则将使用默认...原创 2020-03-17 22:54:11 · 4206 阅读 · 5 评论 -
RecyclerView.notifyItemRemoved导致的数组下标越界问题
我们一般在RecyclerView列表中移除某条Item时会调用 notifyItemRemoved 方法,其还附带了相应的移除特效。使用虽然简单,却埋了一个大坑;当你调用 notifyItemRemoved 之后,如果你移除的刚好是倒数第二个数据,此时点击最后一条数据,就会惊讶的发现当前点击的下标居然没变,然后抛出数组越界的错误。为什么呢,原因如下:众所周知,RecyclerView更新数...原创 2020-03-17 22:34:47 · 1573 阅读 · 0 评论 -
Android实现同时安装测试环境与生产环境包,及区分app名和图标
众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。如果没有开发流程中缺少自动化打包或者测试同学不保存蒲公英二维码,这时候就会产生多余时间成本。那么有没有一种可能,同时安装测试与生产环境的包呢?这个当然是可以的,我们更换包名就行了,Android Studio早已为我们准备了...原创 2020-03-09 00:14:54 · 3787 阅读 · 0 评论 -
日常开发 | Android设置属性动画无限旋转
两种方式实现:方式1:ImageView img = findViewById(R.id.img_src);ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(img, "rotation", 0, 359);objectAnimator.setRepeatCount(ValueAnimator.INFINITE);objectA...原创 2019-12-16 11:52:53 · 2748 阅读 · 0 评论 -
Android利用DownloadManager实现文件下载
Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManager,这是Android提供的系统服务,通过这个服务下载文件,整个过程全部交给了系统负责,免去了我们别的操作。下面我们就来实地演示一下操作。测试api sdk28, Android Studio3.4 小米...原创 2019-10-26 22:52:31 · 3308 阅读 · 0 评论 -
Android自定义View-Canvas之图片文字(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。更多Android学习笔记,请关注Android-NoteBook,欢迎Star。一.Canvas的常用操作速查表操作类型 相关API 备注 绘制颜色 drawColor, drawRGB, drawARGB 使用单一颜色填充整个画布 绘制基本形状 drawPoint, d...转载 2019-07-07 20:46:27 · 711 阅读 · 0 评论 -
Android自定义View_Path基本操作(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。更多Android学习笔记,请关注Android-NoteBook,欢迎Star。在前面我们学习了Canvas的基本操作,现在我们玩点更好玩的东西吧。有了它就能更加欢乐。哈哈Path常用方法表注意:本表中并未包含api21以上的方法,如果在使用过程中遇到,我会提出并说明。作用 相关方法 备...转载 2019-07-07 20:51:37 · 617 阅读 · 0 评论 -
Andorid自定义View-Canvas之画布操作(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。Canvas常用速查表操作类型 相关API 备注 绘制颜色 drawColor, drawRGB, drawARGB 使用单一颜色填充整个画布 绘制基本形状 drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRou...转载 2019-07-07 20:39:23 · 413 阅读 · 0 评论 -
Android自定义View-分类与流程
注明: 非常感谢 gcssloop 的博客,以下为我学习时的笔记记录。自定义View分为自定义ViewGroup与自定义View.但其实在绘制的时候 ViewGroup 相当于容器,view为子view,子view内部也可能会有viewgroup,所以是层层递归。函数调用链自定义View绘制流程函数调用链几个重要的函数1. 构造函数构造函数式View的入口,可以用于初始化一些...转载 2019-07-07 20:32:59 · 284 阅读 · 0 评论 -
Android自定义View进阶-分类与流程(学习笔记)
Android自定义View进阶-分类与流程注明: 非常感谢 gcssloop 的博客,以下为我学习时的笔记记录。自定义View分为自定义ViewGroup与自定义View.但其实在绘制的时候 ViewGroup 相当于容器,view为子view,子view内部也可能会有viewgroup,所以是层层递归。函数调用链自定义View绘制流程函数调用链几个重要的函数1. 构造函数...转载 2019-07-01 18:02:00 · 386 阅读 · 0 评论 -
Android自定义View-基础概念篇(学习笔记)
Android自定义View-基础篇注明: 非常感谢 gcssloop 的博客,以下为我学习时的笔记记录。坐标系屏幕坐标系和数学坐标系的区别由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向,所以在手机屏幕上的坐标系和数学中常见的坐标系是稍微有差别的。如下:实际屏幕上的默认坐标系如下:View上的坐标系(View上的坐标系是相对于父控件而言...转载 2019-07-01 18:01:00 · 372 阅读 · 0 评论 -
Android自定义View-入门(明白自定义View和自定义ViewGroup)
自定义View为什么要自定义View? 主要是Andorid系统内置的View 无法实现我们的 需求,我们需要针对我们的业务需求定制我们想要的 View.自定义View 我们大部分时候只需重写两个函数: onMeasure(),onDraw(). onMeasure()负责对当前View 的尺寸进行测量,onDraw负责把当前这个View绘制出来,当然了,还需要写构造函数。public Vi...原创 2019-07-01 17:57:16 · 3375 阅读 · 2 评论 -
使用Fragmentation,start跳转到嵌套viewpager页面出现返回键重写失效原因。
在Fragment中嵌套ViewPager时应该使用getChildFragmentManager(),而不是getFragmentManager();getFragmentManager()所得到的是所在fragment 的父容器的管理器,getChildFragmentManager()所得到的是在fragment里面子容器的管理器。最近在写项目时,采用的是单Activit...原创 2019-06-20 15:11:53 · 710 阅读 · 0 评论 -
Android自定义View_Path之贝塞尔曲线(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。更多Android学习笔记,请关注Android-NoteBook,欢迎Star。先来看一下常用的方法:Path 常用方法表:作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位...转载 2019-07-07 20:55:15 · 473 阅读 · 0 评论 -
Android自定义View_Path完结篇(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。更多Android学习笔记,请关注Android-NoteBook,欢迎Star。Path常用方法表作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和...转载 2019-07-07 21:24:04 · 490 阅读 · 0 评论 -
Android-浅谈广播机制,实现强制下线功能
首先,复习一下,什么是广播呢?顾名思义,广播就像我们上学的时候每个班级里的喇叭一样,这些喇叭都是接入到学校的总的一个地方,比如说广播室啊什么的。一旦有什么通知,就会播放一条让全校师生都知道的广播。类似的工作机制其实很多,比如就像计算机的网络通信。为了便于进行系统级别的消息通知,Android也有自己的一套类似的广播消息机制。在Android中,每个应用都可以对自己感兴趣的广播进行注册,...原创 2018-09-18 17:46:55 · 637 阅读 · 0 评论 -
一个简单的Android网络访问全局码判断及通用数据解析方案
我们在开发中,网络请求经常会遇到各种错误码的判断,不可能我们每次都要自己去判断吧,这样也太麻烦了。刚好实习期间项目中有很多需要的地方,于是写了个简单的小工具。代码很简单,并没有太多优化,我们在使用时可以按照自己的想法,自由定制,再多的设计模式都只是为了更好的使用,所以不用太过在意,如果考虑优化,那么可以进行更好的封装改造,这里我只是简单给一个解决的思想。流程大概是这样的:首先,创建自己...原创 2019-10-06 00:27:01 · 740 阅读 · 0 评论 -
RxJava奇淫技巧-实现倒计时的功能
/** * 开启倒计时。传入间隔时间,次数 * @param time * @param sum */ private void startTimer(long time, int sum) { Observable.interval(time, TimeUnit.MILLISECONDS) .ta...原创 2019-08-01 12:10:23 · 756 阅读 · 0 评论 -
Debug中的一些想法记录
最近在写毕设,虽然以前跟着别人的视频也写过一些项目,也总结了不少实用的工具,收获是挺满的。但是当真正自己去写一个 完整app 的时候,还是非常纠结,一直想的怎样去优化这个项目,如何解耦,如果写出高质量的代码。某些地方还是太死板。于是今天,将业务代码推翻,用mvp重构了一下,以前采用是单模块化+插件化,改成mvp+,看起来清爽多了,仔细一想,又想加上DataBing,以前也写过DataBing的D...原创 2019-07-24 23:09:58 · 260 阅读 · 2 评论 -
Android动画全面解析-夯实基础
Android的动画可以分为两种:传统动画与属性动画,如果严格细分的话,可以分为三种,那就是 View动画(补件动画),帧动画,属性动画。开始之前,我们先准备一些概念:View动画(补件动画)View 动画 通过对场景里的对象不断做图像变换(平移-TranslateAnimation,缩放-ScaleAnimation,旋转-RotateAnimation,透明度-AlphaAnimati...原创 2019-07-05 16:06:54 · 404 阅读 · 0 评论 -
Android View滑动冲突全面解析-夯实基础
滑动冲突这件事我们日常开发中应该是经常见,在我刚学习Android的时候,viewPager 与 SlidingMenu 侧滑栏的冲突也是搞得我一头雾水,不知道该怎么去解决,所以经常会去采用问百度的做法,这样下来的结果就是没有自己的思想了。网上的解决方案也都千篇一律,因为大家都很聪明啊。这一次,我们就辛苦一点,结合前面的学习,对Android View有一个全面的认识,学习本篇之前,请具备一定的...原创 2019-07-03 21:24:00 · 469 阅读 · 0 评论 -
Android四大组件全面解析,夯实基础。
Android四大组件Android, Poor is the foundation穷是基础。Activity生命周期与Fragment进行绑定时的生命周期变动SDK28 模拟器28进入Activity,绑定Fragment,然后点击返回键之后进入Activity,绑定Fragment,点击home,然后重新进入,再点击返回进入Activity,绑定Fragme...原创 2019-06-26 21:52:16 · 720 阅读 · 0 评论 -
Android自定义View_Path&PathMeasure(学习笔记)
注明: 非常感谢gcssloop的博客,以下为我学习时的笔记记录。更多Android学习笔记,请关注Android-NoteBook,欢迎Star。顾名思义,PathMeasure是一个用来测量 Path的类,主要方法如下:构造方法方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path,...转载 2019-07-07 21:31:21 · 427 阅读 · 0 评论 -
一个简单的页面加载管理类(包含加载中,加载失败,数据为空,加载成功)
在最近公布的比赛框架中,发现了页面加载管理类,觉得挺有用的,所以做个简单的笔记。什么是页面加载管理类呢?(大佬可直接跳过翻看实现过程)如果能有这个问题,那么很好,哈哈哈,你和我一样,刚开始都挺疑惑的。我们一般在写网络请求的时候,如果不涉及什么MVP,或者别的,就一个简单网络请求,然后再成功的结果里刷新View,请求过程中总不能白屏吧,所以有些人可能会让转一个圈,或者显示加载中的布局,...原创 2019-05-25 19:03:41 · 914 阅读 · 0 评论 -
MPAndroidChart_RadarChart雷达图的那些事
MPAndroidChart雷达图的那些事MPAndroidChart攻略——RadarChart雷达图的使用。实现自定义x轴标签颜色及雷达图基本使用详细教程。MPAndroidChart_折线图的那些事MPAndroidChart_饼图的那些事MPAndroidChart_动态柱状图MPAndroidChart_水平条形图的那些事MPAndroidChart_并列柱状图,及如何实...原创 2019-05-11 21:52:38 · 4356 阅读 · 5 评论 -
> More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'
记一次运行App时的错误处理方法。如图,解决办法为:在你的build.gradle android下添加 packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' }好了,我们分析一下为什么要添加这句代码。//打包配置//1、pickFirs...原创 2019-05-11 17:35:22 · 4136 阅读 · 0 评论 -
MPAndroidChart_折线图的那些事
MPAndroidChart攻略第一步——LineChart的点点滴滴。带你入门折线图的基本使用,各种属性的设置,自定义轴上的标签,及去除边框线与轴线,和MarkView提示的使用。MPAndroidChart_折线图的那些事MPAndroidChart_饼图的那些事MPAndroidChart_动态柱状图MPAndroidChart_水平条形图的那些事MPAndroid...原创 2019-01-01 15:18:03 · 5346 阅读 · 10 评论 -
Android自定义View,制作饼状图带动画效果
一个简单的自定义view饼状图,加入了动画效果先看一下效果下面就直接上代码了public class Yidong2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns...原创 2018-12-09 15:51:03 · 1216 阅读 · 1 评论 -
android studio 导入第三方的jar包,add as library的位置
因为学习需求,需要导入一个jar包,也就是SlidingMenu,侧滑的控件,但导入时总是出错。网上找了不少教程都是将 jar包放进lib文件内,右击包名,选择add as library。可是对于我这个新手来说,怎么也找不到,可能很多3.0以上的小伙伴都有过跟我相同的经历吧。整理一下解决过程发上来,也便于像我一样的新手吧。。第一步,将下载好的jar包放入 libs文件夹内 ,即这里...原创 2018-11-22 16:14:15 · 12900 阅读 · 6 评论 -
Android中小数除0操作,即除去1.01000后的0
今天在写android的 listview 的时候,想让用户输入数据,然后店点击完成排序,但涉及到用户输入小数的情况,但如果集合使用double或者float,listview肯定就会变成小数.0000这种,这时候影响界面效果,所以就涉及到了除0操作,先看一下效果。除0后, 这样一下是不是就顺眼一点了,好了下面上代码。DecimalFormat chuling = new D...原创 2018-10-11 18:53:15 · 1493 阅读 · 0 评论 -
setSupportActionBar()方法报错
今天在使用Tollbar替换标题栏时,出现了这样的错误刚开始不知道咋回事,然后搜了一会,发现是倒错了包,明明很简单的错,还找了有一会,唉,还真的是菜啊。将 import android.widget.Toolbar;修改为import android.support.v7.widget.Toolbar;参阅资料 go...原创 2018-09-20 19:34:03 · 2057 阅读 · 1 评论 -
SharedPreferences实现记住密码的登录界面-Android
最近在学习Android的数据存储,便将自己的理解写下来。新手浅显望理解。在Android中,存储数据主要采用了3种方案,分别为文件存储, SharedPreferences存储以及数据库存储,当然,数据也可以保存在sd卡里,但相比上面这几种,可能就要麻烦点了,而且安全性也会降低。好了,我们今天就来使用它们当中的 SharedPreferences来实现一下简单的记住密码功能。不...原创 2018-09-20 19:26:45 · 1157 阅读 · 0 评论 -
Android studio preview不显示
作为一个刚学习Android的小白,装Android studio的过程中就遇到了不少问题,这两天发现preview一直不显示,百度查了一下,很多教程都只是改了一下这里,但是治标不治本啊,新的项目又会出现这个问题。在参考了网上各路老鸟的修改方法,也检查了自己设置之后,最终发现原来是buildToolsVersion版本和compileSdkVersion版本不一致。打开设置,明显发现以...原创 2018-09-07 17:45:33 · 4435 阅读 · 0 评论