android
文章平均质量分 74
卡布哥哥学安卓
android开发
展开
-
android源码宇宙-Glide
Glide可以实现生命周期绑定的操作,如果我们的请求是在activity或fragment中请求图片的,则会使用添加fragemtn的方式让我们的请求绑定成功生命周期(理解不了的是,为什么到了现在glide仍然没有向Lifecycle转换的想法)。最终会生成一个RequestManager用来处理请求。绑定生命周期结束后,则对url进行保存,同时可以决定我们加载的图片类型,例如最后是请求的加载逻辑,首先glide会尝试去内存中获取图片数据,如果获取成功那么直接返回。...原创 2022-07-23 10:07:34 · 647 阅读 · 1 评论 -
android源码宇宙-Retrofit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8L4CTCX-1656725069031)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ffa3fa2439714c76a0b10cc1c0e22770~tplv-k3u1fbpfcp-zoom-1.image)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NV02cb6-1656725069033)(https://p3-juejin原创 2022-07-02 09:24:13 · 227 阅读 · 0 评论 -
android源码宇宙-Choreographer
Choreographer主要用来申请垂直脉冲信号,指导ViewRootImpl完成屏幕刷新讲Choreographer要从ViewRootImpl开始讲起应用在requestLayout,invalidate后都会开始调用ViewRootImpl.scheduleTraversals来调度Choreographer关于下图中的mTraversalRunnable,它会在适当的时机被Choreographer回调,回调后会依次执行ViewRootImpl.doTraversal方法--> performTr原创 2022-06-19 17:35:19 · 832 阅读 · 0 评论 -
android源码宇宙-activity启动源码
Activity栈中的一个节点,用于展示一个Activity它集成了WindowToken实现了WindowManagerService中的一个接口既然如此顺便看看WindowToken吧用来替代ActivityStackSupervisor这东西是ActivityThread中的一个变量它可以作为一个测试框架的根基,因为它是先于我们的Application和Activity启动的,所以它可以监听到我们创建Activity和Application操作。android是支持自定义Instrumentation原创 2022-06-11 18:12:52 · 829 阅读 · 0 评论 -
android源码宇宙-SystemServer源码阅读简单理解
欢迎关注我的公众号:安安安安卓因为一些中所不周知的原因,近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记,或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适,手动狗头。SystemServer老生常谈了,也不是啥重点,不过懂的话还是很有用的。这东西用来创建和管理系统服务,同时也可以管理我们的应用进程关于他们的源码分析,并不能只看他自己,需要从zygote开始查看,然后还要辅助app进程的启动来理解源码从Zygote到S.原创 2022-05-15 16:14:50 · 511 阅读 · 2 评论 -
android源码宇宙-Okhttp源码简单阅读
因为一些众所不周知的原因,近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记,或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适,手动狗头。Okhttp的使用源码阅读大纲同步调用网络请求流程异步调用网络请求流程Dispatcher类的代码逻辑几个拦截器的逻辑查看同步调用主流程从newCall开始调用RealCall.newRealCall创建CallRealCall.newRealCall因为.原创 2022-05-14 09:20:49 · 184 阅读 · 0 评论 -
Compose默认主题Color不够用怎么办?,一招解决
为什么要自定义主题 primary: Color, primaryVariant: Color, secondary: Color, secondaryVariant: Color, background: Color, surface: Color, error: Color, onPrimary: Color, onSecondary: Color, onBackground: Color, onSurface: Colo原创 2022-04-21 22:08:04 · 671 阅读 · 0 评论 -
Jetpack Compose使用自定义操作符实现绘制五角星效果
公众号:安安安安卓说明compose中我们的所有ui操作,包括一些行为,例如:点击、手势等都需要使用Modifier来进行操作。因此对Modifier的理解可以帮助我们解决很多问题的自定义星行Modifier本文我们打算自定义一个Modifier,通过这个modifier我们可以实现用一个操作符就画出五角星的效果原理我们实现绘制五角星的原理如下图,首先我们会虚构两个圆,将内圆和外圆角度平分五份,然后依次连接内圆和外圆的切点的坐标,然后使用path绘制完成。实现代码中的实现涉及到自定义绘.原创 2022-04-16 11:56:44 · 2000 阅读 · 0 评论 -
compose 页面间参数正向反向传递方法
名词解释什么是正向反向参数传递呢正向:相当于一个Activity启动另一个Activity并向其传递参数;反向:相当于一个Activity退出的时候向启动它的Activity回传参数;思路本文主要讲反向参数传递,正向参数传递参考:正向参数传递起先关于这个问题是没什么思路的,网上(包括google官网)也没有相关说明,以至于公司新开的项目,虽然使用compose来写的,但是反向参数传递却是自定义的一个总线框架来做的。使用总线框架做明显是不合适的。基于这样一个原因,项目完成后我决定研究一下这原创 2022-04-07 18:29:16 · 2152 阅读 · 0 评论 -
2022年学习计划完成情况贴
正式将今年的学习计划搬到csdn来更新,原因无他,掘金没有置顶功能学习计划完成情况20220403使用RecycleView优雅的实现数据列表更新android使用知识增加键盘弹出和关闭操作方法20220326compose中返回键的监听方式实现20220326 Compose实用知识整理,增加了防快速点击效果操作符,和Compose跳转activity并返回结果的方法20220107使用compose实现淘票票选电影座位的效果20220102android事件流原创 2022-04-03 17:38:15 · 1599 阅读 · 0 评论 -
使用RecycleView优雅的实现数据列表更新
近期需要对公司的祖传项目进行一些重构,在重构过程中涉及到多个列表的重构。老的列表中更新数据一直使用的notifyDataSetChanged进行数据的更新。从我入职时期这便是我的一大心病,因此这次一并解决问题描述关于notifyDataSetChanged的弊端,无需赘言,他会对 Recycleview 的整个列表进行刷新。因此在大数据量场景下(目前此种更新数据方法也不早再是官方推荐的了),这可能是很大的性能障碍。解决方案:使用 ListAdapter 进行局部刷新数据使用 DiffUtil.原创 2022-04-03 15:32:11 · 6983 阅读 · 0 评论 -
使用kotlin委托实现ViewBind懒加载
本文我们使用继承 Lazy 和 lazy 关键字实现 Viewbinding 的注入继承 Lazy 方式实现代码fun <T : ViewBinding> AppCompatActivity.binding(inflate: (LayoutInflater) -> T): Lazy<T> { return MainLazy(this, inflate)}class MainLazy<T : ViewBinding>( val activi原创 2022-04-03 08:20:43 · 2620 阅读 · 0 评论 -
Compose实用知识
本文主要讲解一些安卓中实用的compose知识,长期更新防快速点击说明防快速点击主要使用 Modifier 操作符来实现,代码如下代码@Composablefun Modifier.avoidRepeatclickable(millis: Long = 500, onClick: () -> Unit): Modifier { var timeStamp by remember { mutableStateOf(0L) } return cli.原创 2022-03-26 10:43:33 · 2869 阅读 · 0 评论 -
Compose中模仿Activity启动模式
关于启动模式我们都知道在activity体系中是有多种启动模式的:standard、singleTop、singleInstance、singleTask四种。但是在compose中因为是单activity所以自然是没有启动模式的说法的,因此本文我使用一些NavHostController的一些api来实现启动模式中的效果。standard默认的效果就是standard的效果singleTopcompose中我们可以通过判断顶部的页面是否是我们要启动的singleTop页面来处理。如果顶部页面是原创 2022-02-12 09:47:25 · 1322 阅读 · 0 评论 -
使用Compose实现淘票票选择电影座位的效果
关注公众号学习更多知识这是一篇去年就写好的博客起因新年要来了,看电影是我们新年中必不可少的娱乐项目,那么看电影的时候你是否有想过选座位的空间是如何实现的呢,座位优秀的程序员,我就想到了,今天就带你研究。compose的绘制系列在两个月前就已经学习完成了,但是仅限于api的熟练,因此今天打算做一个仿淘票票选电影座位的自定义ui。效果查看先看一下支付宝客户端的实现吧我们发现选座位的主要点就是座位的绘制、选择座位的逻辑、双指手势缩放、单指长按后拖动效果。所以关键就是这几个效果的实现说到这里了提原创 2022-02-12 09:42:11 · 879 阅读 · 0 评论 -
android事件流程图
原创 2022-01-02 19:26:50 · 1381 阅读 · 0 评论 -
Compose中下拉框的使用
代码val datas = mutableListOf( "西瓜", "苹果", "芝麻", "狗熊") "西瓜", "苹果", "芝麻", "狗熊") DropdownMenu(expanded = true, onDismissRequest = { }, modifier = Modifier.width(100.dp)) { datas.forEach {原创 2022-01-01 10:36:17 · 1338 阅读 · 0 评论 -
Jetpack Compose详尽介绍
概览Compose提供了多个api用来实现各种手势,这些手势包括点击、按压、双击、长按、水平垂直滑动、拖动、双指平移缩放旋转、嵌套欢动效果各种手势效果介绍点击手势代码Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Box(modifier = Modifier .size(200.dp) .background(Color.Gr原创 2021-12-31 23:30:17 · 1466 阅读 · 0 评论 -
Compose 自定义TextField实现自定义的输入框
概览众所周知Compose中默认的TextField和OutlineTextField样式并不能满足所有的使用场景,所以自定义TextField就成了必备技能,本文就揭露一下自定义TextField的实现。自定义TextField主要使用BasicTextField实现。简单自定义BasicTextField示例代码 var text by remember { mutableStateOf("简单的TextField") } BasicTextField(原创 2021-12-31 23:28:14 · 2577 阅读 · 1 评论 -
Android ConstraintLayout详细教程
多个功能使用方法基线对齐xml基线对齐xml属性layout_constraintBaseline_toBaselineOf效果角度约束xml角度约束xml属性 app:layout_constraintCircle="@id/iv_cycle_main" app:layout_constraintCircleAngle="45" app:layout_constraintCircleRadius="200dp"效果百原创 2021-12-31 23:25:22 · 1583 阅读 · 0 评论 -
Jetpack SplashScreen帮你实现快速开屏
概述android12新增了一个SplashScreen的启动页辅助类。不过他并不能向下兼容,只能在android12进行使用。因此官方在jetpack中开发了可以向下进行兼容的jetpack版SplashScreen(目前仍然是alpha所以还不不建议在项目中使用)。本文会简单讲讲jetpack版SplashScreen的使用。简易使用引入依赖implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'配置主题<styl原创 2021-12-31 23:24:02 · 1333 阅读 · 0 评论 -
协程知识总结
这篇是许久之前初学协程之时整理的笔记,今天偶然翻到便整理成md发出来。现在的我真的越来越难总结出这么多又臭又长的东西了。协程定义官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。协程与线程的区别协程是编译器级别的,线程是系统级别的优势协程就像轻量级的线程,线程是由系统调度的,线程的阻塞和切换开销都很大。而.原创 2021-12-31 23:22:35 · 978 阅读 · 0 评论 -
Jetpack Compose导航动画
页面导航动画是啥Compose的页面导航动画就相当于Activity中的页面切换动画,例如打开Activity时候进入的动画,关闭Activity时候的退出动画。后文所有提到导航的部分,都是指得Compose导航。页面导航实现的现状官方正式版的导航中并没有提供导航的动画,但是可能官方也发现了这个问题,因此官方目前正在开发独立于主框架的依赖项目(com.google.accompanist:accompanist-navigation-animation)方便开发者使用导航。依赖目前最新版本是:co原创 2021-12-29 05:21:30 · 1319 阅读 · 1 评论 -
Compose中下拉弹出框的使用
代码val datas = mutableListOf( "西瓜", "苹果", "芝麻", "狗熊") "西瓜", "苹果", "芝麻", "狗熊") DropdownMenu(expanded = true, onDismissRequest = { }, modifier = Modifier.width(100.dp)) { datas.forEach {原创 2021-12-26 14:40:04 · 936 阅读 · 0 评论 -
android原生实用知识整理
so文件重复解决日志11:34:47 * What went wrong:11:34:47 Execution failed for task ':algorithm:mergeDebugNativeLibs'.11:34:47 > A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction11:34:47 > 2 files found wit原创 2021-12-11 17:02:12 · 2710 阅读 · 0 评论 -
android Compose中ScrollableTabRow的使用
概述ScrollableTabRow就相当于以前开发中使用的TabLayout。属性介绍selectedTabIndex 当前选择的item的索引backgroundColor背景颜色indicator导航条的样式divider 分割线属性Tab用于实现单条的item简单实现代码@Composablefun Greeting() { val tabs = mutableListOf<String>( "安安安安卓", "鸿阳",原创 2021-11-07 08:53:28 · 1486 阅读 · 0 评论 -
android Compose中沉浸式设计和导航栏的处理
关注公众号学习更多知识Material Design风格的顶部和底部导航栏Compose中Material Design风格的设计我们的做法如下:1、使用Scafoold作为页面的顶级,Scafoold中承载topbar和bottombar分别作为顶部导航栏和底部导航栏。2、调用WindowCompat.setDecorFitsSystemWindows(window, false)方法让我们的布局超出状态栏和底部导航栏的位置3、使用ProvideWindowInsets包裹布局,使我们可以.原创 2021-11-02 06:52:30 · 5146 阅读 · 1 评论 -
android-使用compose写一个贪吃蛇游戏
关注公众号学习更多知识灵感来源前段时间看到了大佬fundroid使用compose编写俄罗斯方块的文章,深受启发,当时便决定也要把诺基亚的贪吃蛇搬到android上来,因此才有了这篇文章本篇文章界面和思路参考于 fundroid的文章fundroid俄罗斯方块传送: https://blog.csdn.net/vitaviva/article/details/115878190最终效果提前发一下效果,让读者有个心理预期,逻辑真不复杂,务必耐心看完思路我们的界面分为两部分,上半部分是游.原创 2021-10-09 07:33:25 · 682 阅读 · 0 评论 -
android CameraX实现拍摄视频功能
关注公众号学习更多知识本篇文章的内容是上一篇拍摄照片内容的延续上一篇文章传送门: 嗖所用的工程代码也是和上一篇是相同的概览概念和简单的使用建议跳到上一篇文章去看https://juejin.cn/post/6968317886678958088使用(简单拍摄一段视频并展示)打开相机并设置相关参数private fun openCamera() { cameraProviderFuture = ProcessCameraProvider.getInstance(thi.原创 2021-09-29 10:50:24 · 2069 阅读 · 0 评论 -
Android - JobService常用场景分析
概览JobScheduler是android系统提供的一个任务执行框架,通过JobScheduler我们可以根据不同的策略调度任务的执行。例如:指定任务可以在指定的网络下执行指定任务只在充电的状态下进行设置任务的截止时间指定延迟一段时间后执行任务指定任务在手机空闲的情况下执行如果app被杀死则无法最终执行任务,如果有重启后需要继续执行这种需要建议使用WorkManager使用基本使用创建自定义JobService并在manifest中配置class ExeTaskAfter2Se原创 2021-09-25 20:33:04 · 590 阅读 · 0 评论 -
Compose中Paging3、SwipeRefresh配合实现下拉刷新和自动加载
关注公众号学习更多知识概述Compose中Paging3的使用和Recycleview中Paging3的使用基本一致,不同的是Compose中我们的ui使用LazyColumn来承载数据。我们需要做的事情如下:配置PagingSource配置数据类SimpleUseBean配置ViewModel在LazyColumn中渲染数据简单加载数据依赖 var paging_version = "3.0.1" implementation("androidx.paging:pag.原创 2021-09-23 07:27:49 · 2188 阅读 · 1 评论 -
android画月全食
实现方式想实现月亮发光效果需要使用的Paint类的setMaskFilter()方法,传入BlurMaskFilter对象实现高斯模糊发光。思路分析首先我们知道发生月全食的时候,月亮是完全被挡住的,但是他的周围会有一层光晕,这层光晕应该是一个黄色的渐变效果,通过MaskFilter我们可以设置光晕的半径和颜色,为了使效果更加逼真我们的demo给光晕加上一层透明度变化的动态效果代码思路变量的声明var vWidth = 0f var vHeight = 0f var step =1原创 2021-09-19 06:05:06 · 163 阅读 · 0 评论 -
android-Room通过大头儿子的故事讲讲对象关系
关注公众号学习更多知识概述sqlite是一个关系型数据库,因此对象关系就是重要的一部分,例如我们定义的数据中有森林和树木,森林包含树木。此时定义的森林中应该包含于一个树木的对象,这便是森林和树木的对象关系关系类型多个对象之间的关系有以下四种:一对一一对多多对多嵌套一对一举例:独生子 一个爸爸有一个儿子,这便是一对一的对对象关系代码class RoomRelativeActivity : CustomAdapterActivity() { private lateini原创 2021-09-13 07:29:37 · 156 阅读 · 0 评论 -
Room数据库--TypeConverter
TypeConverter是什么TypeConverter是Room数据库的类型转换器,可以对收到的数据进行类型转换例如:1、服务器返回Long类型的时间戳,我们可以通过TypeConverter将时间戳转换为Date类型2、如果服务器返回了对象数组,默认Room是无法处理数组的,此时我们可以通过TypeConverter将Json中的数组转换为对象使用TypeConverter存储数组和日期首先定义一个Student类和Book类一个学生是可以有多本书的,所以我们的Student构造中有一个原创 2021-09-12 12:27:21 · 1380 阅读 · 0 评论 -
MotionLayout详细解析
关注公众号学习更多知识git地址https://github.com/ananananzhuo-blog/MotionLayoutSample简单实现效果模拟器录制的,比较卡顿,建议耐心看完使用概述MotionLayout是一个布局,ConstraintLayout的子布局。专门用来实现运动过程中的控件动画,举例:我们可以通过在布局文件layoutA中MotionLayout进行布局,在布局中设置两个子控件TextView和ImageView。比如我们想在布局中手指触碰向上滑动的时候让.原创 2021-09-05 09:44:52 · 759 阅读 · 0 评论 -
Jetpack Compose状态管理
概览所谓的状态可以简单的理解为应用中的某个值的变化,比如可以是一个布尔值、数组放在业务的场景中,可以是 TextField 中的文字、动画执行的状态、用户收藏的商品都是状态我们知道 compose 是声明式的 ui,每次我们重组页面的时候都会把组件重组,此时就需要引入状态进行管理,例如:我们在商品的 item 里面点击按钮收藏了商品,此时商品的收藏状态发生了改变,我们需要重组 ui 将商品变为已收藏状态,这个时候就需要用 remember 扩展方法保存重组状态,如果使用 boolean 这个基本类型原创 2021-08-26 22:00:21 · 1198 阅读 · 0 评论 -
Kotlin泛型简单理解
泛型使用方法在类上使用泛型类上面使用泛型,需要把泛型声明在类名后,使用尖括号表示class C1<T>{ fun print(t:T){ print(t.toString()) }}泛型函数在fun关键字后使用声明fun <T> method1(t:T):String{ println(t.toString()) return t.toString()}型变Java的型变Java是不型变的,可以这么理解:L原创 2021-08-15 20:16:13 · 190 阅读 · 0 评论 -
android Compose自定义绘制入门
git地址:https://github.com/ananananzhuo-blog/ComposeCanvesSampleCanvasCanvas绘制基本图像Paint绘制圆代码 Canvas(modifier = Modifier.size(300.dp)) { drawCircle( color = Color.Red,//填充颜色 radius = 100.dp.toPx(),//设置绘制圆的半.原创 2021-08-15 20:15:34 · 808 阅读 · 0 评论 -
使用Compose实现自定义摩天轮的效果
关注我的公众号 “安安安安卓” 学习更多知识代码git地址:https://github.com/ananananzhuo-blog/ComposeCustomLayoutSample先看最终效果效果Layout作用自定义布局使用Layout实现,Layout可以布局多个可组合项。我们可以通过Layout实现各种复杂的自定义布局。Column和Row都是通过Layout实现的Layout api讲解下面的代码摘抄自官方,实现了一个Column的效果@Composablefun MyBa.原创 2021-08-15 20:14:55 · 445 阅读 · 0 评论 -
Kotlin协程上下文和调度器
关注我的公众号 “安安安安卓” 学习更多知识上下文协程总是运行在一些以 CoroutineContext 类型为代表的上下文中调度器协程上下文包含一个 协程调度器 (参见 CoroutineDispatcher)它确定了相关的协程在哪个线程或哪些线程上执行。协程调度器可以将协程限制在一个特定的线程执行,或将它分派到一个线程池,亦或是让它不受限地运行。所有的协程构建器诸如 launch 和 async 接收一个可选的 CoroutineContext 参数,它可以被用来显式的为一个新协程或其它上.原创 2021-08-15 20:13:41 · 187 阅读 · 0 评论