Android 基础与进阶
文章平均质量分 81
从Android新手入门开始,体验各种开源框架的妙用,熟悉自定义组件的用法与原理,记录逐步学习Android的点点滴滴,Talk is cheap,show me the code?
化作孤岛的瓜
广州-无线端开发工程师
展开
-
RxJava 2.0 全体系梳理(持续更新ing)
只有观察者订阅了,才开始执行发射数据的代码。并且Cold Observable和Observer只能是一对一的关系。当有多个不同的订阅者时,消息是重新完整发送的,也就是说,对于Cold Observeable来说,有多个Observer存在的时候,各自的事件是独立的。多个订阅的sunbscribe(或者说观察者)事件各自独立。Hot Observable 无论有没有观察者订阅,事件始终都会发生。当Hot Observable有多个订阅者时,Hot Observable与订阅者们的关系是一对多的关系。原创 2023-07-02 13:36:15 · 1656 阅读 · 0 评论 -
Android——CInit源码分析
CInit 是一个Android 依赖任务启动框架(最近在分析公司的启动框架,发现虽然实现了DAG结构,可以支持任务依赖,同异步,优先级回调等功能,但是缺点也有很多,配置只能代码配置,不支持注解,不支持多进程等,已经落后于时代了- =!所以找到CInit来研究一下。总的来看框架整体实现比较简单,容易上手或者改造,有一个瑕疵是任务优先级priority并没有实现。较为复杂的点在于任务的执行部分逻辑,需要依次进行依赖环检查,进程判断,线程判断,children依赖任务执行步骤。原创 2023-02-04 20:55:11 · 687 阅读 · 0 评论 -
Android——Matirx 自动生成火焰图小工具
于是写了一个工具包,可以将Matirx抓到的堆栈信息stack自动生成火焰图svg文件。1.把Matirx生成的堆栈文件与mapping文件放到fire根目录下。2.终端运行python3 main.py。3.可以看到svg自动生成出来了。原创 2022-11-05 15:09:58 · 1144 阅读 · 0 评论 -
23种设计模式归纳总结——行为型
主要解决的就是“类或对象之间的交互”问题,将不同的行为代码解耦原创 2022-10-08 13:09:05 · 838 阅读 · 0 评论 -
23种设计模式归纳总结——结构型
主要解决“类或对象的组合或组装”问题,将不同功能代码解耦原创 2022-10-05 07:52:27 · 587 阅读 · 0 评论 -
23种设计模式归纳总结——创建型
主要解决“对象的创建”问题,将创建和使用代码解耦原创 2022-10-01 08:57:41 · 643 阅读 · 0 评论 -
Android——inhale效果实现以及延伸(动画&绘制学习分享一)
概述:本文主要是对drawBitmapMesh的api研究学习,以及介绍模仿mac吸入动效的实现原理。drawBitmapMesh:使bigmap产生形变,功能与drawVertices类似,区别是drawVertices直接对画布产生作用。首先需要看一下api中的参数列表:其中关键参数分别是:bitmap:需要扭曲的图像meshWidth:横向的格数me...原创 2020-04-23 11:04:19 · 686 阅读 · 0 评论 -
Android——基于LinearLayout实现的可联动伸缩布局组件
首先先预览一下实现的效果:红色区域是设置的分割线,可以支持设置分割线的粗度和颜色属性:<declare-styleable name="ZoomLayout"> <attr name="IntervalLineWidth" format="reference" /> <attr name="IntervalLineColor" format="reference" /> </declare-styleable&g原创 2020-09-13 12:24:21 · 1326 阅读 · 2 评论 -
Android 酷炫的3d立体圆柱动画效果实现
最近在drrible上看到一个超酷炫的效果,立体圆柱缓慢上升:https://dribbble.com/shots/7077455-Spending-analytics然后准备实现一波,做之前在网上找了很久,并没有相似的效果,所以自己做了一个,已经上传到我的代码库里:https://github.com/jiangzhengnan/NguiLib欢迎小伙伴们的start或者requ...原创 2019-12-22 18:00:49 · 2530 阅读 · 2 评论 -
Android——基于ConstraintLayout实现的可拖拽位置控件
最近在研究使用android实现平板和电脑端一些应用的效果,话不多说先上个图可以看到,实现了中间的绿色区域换到父布局最左侧的功能。在拖动的过程中,父布局会出现上下左右四个箭头按钮,当光标移动到箭头上并放下时,拖动的视图会移动到指定的方向上去。实现思路:中间的绿色组件,经历了以下几个过程:1.长按实现视图的拖拽。2.拖拽移动过程中,父布局出现四个方向的箭头按钮,当光标在箭头上时显示黄色圆圈表示被选中。3.选中以后,将拖拽的组件移动到视图的最左侧。技术难点:1.首先是如何创造原创 2020-09-10 00:36:10 · 3493 阅读 · 1 评论 -
Android——ASM 极速上手 简单使用
理解一个工具的最快方式就是跑起来,然后原理自然了然于心本文以一个最简单的demo来实现对ASM全过程的了解。创建一个Child类,有一个call方法,最终的目的是在class类的call方法下增加一行输出语句。ASM概念,操作流程:需要创建一个 ClassReader 对象,将 .class 文件的内容读入到一个字节数组中然后需要一个 ClassWriter 的对象将操作之后的字节码的字节数组回写需要事件过滤器 ClassVisitor。在调用 ClassVisitor 的某些.原创 2021-08-28 12:15:57 · 3302 阅读 · 5 评论 -
Android——NguiLib酷炫的动画集合开源框架
项目地址:https://github.com/jiangzhengnan/NguiLib基于Kotlin &Java 语言实现的,符合android material design规范的漂亮 + 实用 + 简单 风格的自定义视图和布局集合,最小sdk版本兼容到14,欢迎rp,欢迎startJcenter地址:https://bintray.com/jiangzhengnan/NguiLib/NguiLib包含以下各种属性/矢量,布局/view动画。用法gradle:..原创 2021-08-28 11:54:19 · 1689 阅读 · 8 评论 -
Android——面向AOP编程(一)
前言:最近在工作中接触到了字节码插桩相关的知识,所以以本文来整理并实践一下相关的知识体系。字节码插桩:AOP编程 打包流程 自定义Gradle Task 查看,识别Java字节码 ASM使用 TransformAOP编程思想:面向切面编程思想,与面向过程和面向对象编程不同,AOP可以理解s为处理项目中一些统一的事物的过程,比如统计所有log,所有的点击事件监听,某个方法的全局操作等等。打包流程:java → class+jar → classes.dex+..原创 2021-08-22 11:15:19 · 326 阅读 · 0 评论 -
Android——Android app bundle插件化部署
其实google发布app bundle已经是18年的事情了,只是一直在业务上接触不到。最近刚好打算用到爱奇艺的Qigsaw框架来做国内的模块化加载,所以打算一起学习一下。说到模块化加载。其实本质就是为了缩小apk大小,增加下载量,增加应用功能的自由装载机制。本文会先从官网的Android app bundle文档与实例开始分析,先快速入手,写一个最简单的模块化调用demo。1.分析官网的demo:演示了如何使用 PlayCore API 请求和下载功能模块:https://git.原创 2021-08-05 23:34:06 · 994 阅读 · 0 评论 -
Android性能分析工具记录
0.Profiler分析内存泄漏分析调用堆栈?1.leakcanary 检测内存泄漏gradle:debugCompile 'com.squareup.leakcanary:leakcanary-android:1.6.1'@Overridepublic void onCreate() { super.onCreate(); if (BuildConfig.DEBUG){ if (LeakCanary.isInAnalyzerProcess...原创 2021-05-26 13:43:53 · 300 阅读 · 1 评论 -
Andorid——SVG矢量动画深度学习(一)
概览:本文主要描述了Android系统实现矢量动画的各种方式以及基础应用,也是一个月以来对矢量动画的学习和总结.矢量图:矢量图不同于位图是用像素描述图像的,它是用数学曲线描述图形。所以一张图片就是对应着一系列的数学曲线,所以图片的显示尺寸和图片体积无关。(这里为什么说显示尺寸,因为矢量图根本就没有所谓的尺寸,就看你把它显示成多大),它的体积就是文本文件的大小。并且矢量图可以无限拉伸不失...原创 2019-07-02 22:53:07 · 867 阅读 · 0 评论 -
Android——ECG心电图的绘制实现(二)
在上篇Android——ECG心电图的绘制实现博客中,实现了心电图的数据展示绘制。在之后又新增了 心电图的自动滑动展示 与 实时绘制功能。效果如下:自动滑动展示实时绘制(这里用到了一个timer不断添加数据)一、自动滑动展示 实现实现思路:通过开启定时器实现下标scrollIndex不断增加,以此来计算展示数据的开始下标scrollStartIndex与结束下标s...原创 2019-05-29 23:14:01 · 9746 阅读 · 14 评论 -
Android——ECG心电图的绘制实现
最近在项目中需要使用到的心电Ecg显示效果,本来打算使用sdk方的视图组件的,但是奈何他们的组件问题太多了。比如网格不对齐(强迫症表示这个无法忍),组件不支持静态显示数据等等问题。所以打算自己写一个用来做主页面的心电数据展示。首先要实现以下几个功能点:1.网格的大小,颜色可控。2.心电线条的颜色粗细可控。3.无论传入的数据源长度是多少,都要均匀的显示在表格上(按一定的比例尺缩放...原创 2019-05-19 23:52:12 · 5381 阅读 · 5 评论 -
Android——贝塞尔曲线的水波浪效果实现
使用贝塞尔曲线实现的水波浪效果,在很多杀毒软件的进度条显示中都有应用:这个效果呢以前在有一个项目中需要实现过,当时是使用的正弦曲线做的效果,不过后来发现贝塞尔曲线也可以做出相同的效果,并且代码更为优雅。那么对于初学者来说呢,首先需要了解什么是贝塞尔曲线,网上有很多教程,这里我找到了比较容易看懂的博客:贝塞尔曲线原理(实现图真漂亮)我们常用的是二阶贝塞尔曲线,其推导公式为:...原创 2019-05-12 14:55:50 · 2104 阅读 · 0 评论 -
Android——腾讯QQ的Tab按钮动画效果完美实现
最近在用QQ的时候发现了一个有意思的小细节,如图所示:可以看到Tab按钮都有一个随着用户拖动而转动的特效,一开始被这个效果惊艳到了,QQ还是很细致的,注重细节和用户体验。于是利用空闲时间实现了这个效果,所有代码均用kotlin实现,项目效果如图所示:哈哈是不是一模一样呢,完整的实现代码并不长,只有200多行,但是找思路花了一些时间,也遇到过许多弯路,不过最后都还是坚持下原创 2017-11-25 11:58:53 · 7762 阅读 · 5 评论 -
仿知乎FloatingActionButton浮动按钮动画效果实现(三)
本文主要是为了实现仿知乎FloatingActionButton浮动按钮动画效果实现(一)中提到的第四步骤:设置点击出现的子按钮与描绘子按钮出现的动画效果。这里建议使用Github上的一个MD风格的开源组件:https://github.com/Clans/FloatingActionButton源码大概1K行,实现效果如下:实现步骤如下:1.在gradle中引入依原创 2017-05-06 11:01:29 · 10700 阅读 · 2 评论 -
Android——自由拖动并显示文字的悬浮框实现
项目中需要实现一个状态显示的悬浮框,要求可以设置两种模式:拖动模式和不可拖动模式。实现效果图如下:实现步骤:1.首先要设置该悬浮框的基本属性:/** * 显示弹出框 * * @param context */ @SuppressWarnings("WrongConstant") public static void s原创 2017-05-03 22:09:17 · 6886 阅读 · 0 评论 -
Android——实现渐变色水波纹效果源码
项目中使用到的效果,效果图如下:代码实现:public class WaveView extends View { private Paint mPaint, mCriclePaint, mTextPaint; // 倾斜或旋转、快速变化,当在屏幕上画一条直线时, 横竖不会出现锯齿, // 但是当斜着画时, 就会出现锯齿的效果,所以需要设置抗锯齿 p原创 2017-02-22 20:34:30 · 3152 阅读 · 2 评论 -
AccessibilityService——实现自动遍历点赞功能
概述:利用AccessibilityService机制实现了一个比较好玩儿的功能,微信朋友圈自动遍历点赞。即通过不断的滚动+点赞实现把每一条朋友圈都赞一次。当然其中还要涉及一些判断算法,比如如果这条朋友圈已经赞过就跳过去,以及当前界面没有可赞的朋友圈时执行翻页。其实做起来试错是个很繁冗的过程,这个效果也差不多做了两天。使用方式:运行程序-开启无障碍服务,再切换到微信主界面,原创 2017-02-19 11:00:43 · 27090 阅读 · 25 评论 -
AccessibilityService——实现微信切换账号功能
对AccessibilityService的学习已经有一个多月了,发现其使用方法其实也都蛮简单的,只是在不同项目中试错比较复杂。使用AccessibilityService实现了微信自动切换账号的功能,图示如下(这个步骤都是全自动的喔):使用方式是运行程序-开启无障碍服务,再切换到微信主界面,点击【我】的tab按钮,就会自动执行退出账号再登陆的逻辑了。Accessibi原创 2017-02-12 23:36:30 · 6067 阅读 · 14 评论 -
Android——个性化Progress电池显示视图
项目中需要用到的效果,图示如下:既一个显示电量槽的ProgressBar。一开始没想到可以通过ProgressBar直接实现,想的是通过一个电池图的遮盖,然后再用canvas画内部的红色长方形实现的。后面知道了居然可以直接用ProgressBar写。。。下面讲一下具体怎么实现的,这个也可以收藏起来以后参考用。实现步骤:1.首先实现ProgressBar的布局,这原创 2017-02-11 19:24:35 · 4197 阅读 · 3 评论 -
Android——实现光点模糊渐变的自旋转圆环特效
项目中需要实现的效果图如下:可以这个表盘看到中间部分都是没有什么难点的,主要是周围圆环的三种效果:1:渐变色2:尖端的白点模糊效果3:路径绘制最终实现的效果图如下:完美实现了三点要求。实现思路:1.首先是黑色底色圆环的绘制(黑色圈是固定不变的)。2.在绘制好黑色底色圆环之后再绘制渐变色圆弧(蓝绿部分)。3.最后绘制小星星部分,使用原创 2017-02-05 19:02:32 · 5064 阅读 · 4 评论 -
Android——实现RecyclerView左侧滑删除与右侧滑选择
项目中要实现的功能,之前找了很久发现网上大部分的侧滑删除和列表全选都是ListView的实现,而对RecyclerView的实现却是少之又少,所以花了很多时间实现了一个还比较满意的版本,效果如下:侧滑删除(带自动校位滑动效果):右滑出现选择框:一键编辑(全选):实现原理:1.首先需要实现一个基本的RecyclerView。2. 自定义It原创 2017-01-13 15:35:17 · 15068 阅读 · 2 评论 -
Android——实现酷炫的RecyclerView心形交错下拉刷新动画
最近好久没发博客了啊...虽然工作比较忙,但还是懈怠了。本文介绍实现的一个带动效的RecyclerView下拉刷新动画,效果如下图: 实现原理:基于Aspsine的上拉加载下拉刷新的RecycerView库实现的效果,原创 2017-01-08 16:31:53 · 4354 阅读 · 2 评论 -
Android——高德地图实现多点连线与点击定位监听实现
最近开发的项目中需要使用到的功能,如下图所示:服务器会传来一个包含项数据类型为坐标与时间的数组。需要实现的功能有:1.按时间顺序对每个点进行连线。2.点击单个点会在点的上分dialog内显示时间(如下图)。3.初始化定位至第一个点处。代码实现:1.按时间顺序对每个点进行连线。思路:先服务器回传的ArrayList进行按时间排序: /原创 2016-12-07 22:37:41 · 8087 阅读 · 2 评论 -
Android 使用ExpandableListView打造可展开列表组件
在项目中要用到,需要实现的效果如下:1、可遍历1-12个月份。2、可查看每个月份下对应的照片。运行效果如下:实现思路:一开始打算使用ScrollView嵌套一个LinearLayout,然后add进不同子项,不过这样写代码量会比较多,而且要做子项点击事件处理,逻辑会稍微复杂一点。最后使用了ExpandableListView组件,将数据全部抽离出来,依次原创 2016-11-19 15:27:09 · 1193 阅读 · 0 评论 -
使用华为nexus6p进行拍并照裁剪图片和从相册裁剪图片
在项目的兼容适配上碰到了一个问题,就是之前写好的上传头像功能原创 2016-11-05 14:09:50 · 2368 阅读 · 0 评论 -
Android——插件化学习笔记(一)
写了一个月应用层代码,感觉写呕了,最近在研究插件化动态加载方面的东西。没错就是360的开源库:DroidPluginTeam还有一位大神写的很好的源码分析总结:understand-plugin-framework本文主要对第一篇:Android插件化原理解析——Hook机制之动态代理 遇到的一些问题以及解决最后的作业部分,并记录下作为学习心得笔记。对于刚接触这个的学者,可以起到一定作原创 2016-10-28 17:26:48 · 915 阅读 · 0 评论 -
仿知乎FloatingActionButton浮动按钮动画效果实现(二)
上文 仿知乎FloatingActionButton浮动按钮动画效果实现(一)介绍了知乎的FloatingActionButton的点击动画效果,以及遮布的实现。本文主要实现的是随着RecycleView的上下滑动,FloatingActionButton随之消失或出现的动画效果。效果图如下:实现过程:1、引入Google的desin包:compile 'c原创 2016-10-02 23:40:05 · 8914 阅读 · 4 评论 -
Android——MVP+Retrofit2.0+RxJava框架整合
对三者的学习已经有一段时间了,现在写了一个基础版本的整合Demo,因为下个项目就要正式开始了,这段时间会不断对该Demo进行扩展补充。Demo的Github地址:https://github.com/jiangzhengnan/SimpleMvpRxJavaRetrofit首先让我们回顾一下各部分的原理:MVP模式结构Model: 业务逻辑和实体模型View:用户交互和视图原创 2016-09-27 22:48:52 · 3431 阅读 · 4 评论 -
Android 做一款直播APP?一分钟掌握乐视云直播Demo
最近工作需要做一款直播APP,恩是的,从RTMP协议的实现开始到处理服务器高并发、负载均衡、客户端播放器实现等等等.....估计全部写完我也到而立之年了吧23333......BOSS们估计也是发现了我的困惑。。所以打算集成第三方sdk开发,现在大部分的直播产品都会借助第三方的直播技术,这样也可以保证直播的质量。于是开始了对当下主流直播sdk的调研之旅,以下有几个参考链接:最近市面原创 2016-09-19 16:10:59 · 3085 阅读 · 4 评论 -
RxJava学习(二)——RxJava使用场景总结
11个RxJava的实例集合类名一一对应内容,分别是:MainActivity——RxJava基础用法simplestAty——RxJava简单实例timer——延时操作interval——周期性操作twoexample——两个RxJava初始化demoschedulePeriodically——使用RxJava做轮询请求merge——合并两个数据源ma原创 2016-09-11 15:41:24 · 4360 阅读 · 0 评论 -
RxJava学习(一)——RxJava入门实践与上手Demo
学习响应式Java(RxJava)已经两天辣~看了几篇繁冗的博文以及资料,打算在此做一个简单的总结,供新手参考以及快速入门,也希望大家少走一些我碰到的弯路。首先是RxJava的Github地址:https://github.com/ReactiveX/RxJava在Studio下使用时我们需要添加依赖:compile 'io.reactivex:rxjava:1.0.14'com原创 2016-09-08 22:43:07 · 1691 阅读 · 0 评论 -
Android 仿网易一元夺宝客户端下拉加载动画实现(一)
上上周写的一个demo,仿照网易一元夺宝的下拉刷新效果。原效果是(第一部分)一个小太阳拉下来,然后松开回弹上去,(第二部分)再掉下来一个硬币进行中轴旋转。本文实现的效果的是第一部分的,效果演示图如下:Gif图看起来比较卡顿。。。其实真机演示效果还是很流畅的。下面分析实现过程:当时因为时间有限没有写在下拉刷新的组件中,也没有封装成一个单独的组件,只是在主布局后面写了一原创 2016-09-06 10:21:37 · 2599 阅读 · 1 评论 -
MVP源码实战解析——告别MVC,初识MVP
最近在筹备新项目的开发,打算使用google官方推荐的MVP配合Retrofit+RxAndroid打造一套新项目的框架。先从MVP开始学习,然而网上关于MVP的博客以及学习资料实在是太多,所以打算删繁就简,先研究一番google官方的MVP实例。谷歌的MVP框架源码已经发布五个多月了,如今已经成为了时下最火热的Android框架,其视图与模型完全分离的特性也受到了越来越多开发者的喜爱。原创 2016-09-02 12:49:32 · 1601 阅读 · 0 评论