自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 2022年学习计划完成情况贴

正式将今年的学习计划搬到csdn来更新,原因无他,掘金没有置顶功能学习计划完成情况20220403使用RecycleView优雅的实现数据列表更新android使用知识增加键盘弹出和关闭操作方法20220326compose中返回键的监听方式实现20220326 Compose实用知识整理,增加了防快速点击效果操作符,和Compose跳转activity并返回结果的方法20220107使用compose实现淘票票选电影座位的效果20220102android事件流

2022-04-03 17:38:15 1569

原创 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 2775

原创 使用Compose实现淘票票选择电影座位的效果

关注公众号学习更多知识这是一篇去年就写好的博客起因新年要来了,看电影是我们新年中必不可少的娱乐项目,那么看电影的时候你是否有想过选座位的空间是如何实现的呢,座位优秀的程序员,我就想到了,今天就带你研究。compose的绘制系列在两个月前就已经学习完成了,但是仅限于api的熟练,因此今天打算做一个仿淘票票选电影座位的自定义ui。效果查看先看一下支付宝客户端的实现吧我们发现选座位的主要点就是座位的绘制、选择座位的逻辑、双指手势缩放、单指长按后拖动效果。所以关键就是这几个效果的实现说到这里了提

2022-02-12 09:42:11 832

原创 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 1275

原创 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 2659

原创 android常用网站

三方sdk地址小米开放平台https://dev.mi.com/console/appservice/push.html华为开发者中心https://developer.huawei.com/consumer/cn/appgallery/魅族开放平台http://open.flyme.cn/VIVO开放平台:https://dev.vivo.com.cn/homeOPPO 开放平台https://open.oppomobile.com/...

2021-12-06 15:00:22 2065

原创 android-使用compose写一个贪吃蛇游戏

关注公众号学习更多知识灵感来源前段时间看到了大佬fundroid使用compose编写俄罗斯方块的文章,深受启发,当时便决定也要把诺基亚的贪吃蛇搬到android上来,因此才有了这篇文章本篇文章界面和思路参考于 fundroid的文章fundroid俄罗斯方块传送: https://blog.csdn.net/vitaviva/article/details/115878190最终效果提前发一下效果,让读者有个心理预期,逻辑真不复杂,务必耐心看完思路我们的界面分为两部分,上半部分是游.

2021-10-09 07:33:25 648

原创 android源码宇宙-Glide

Glide可以实现生命周期绑定的操作,如果我们的请求是在activity或fragment中请求图片的,则会使用添加fragemtn的方式让我们的请求绑定成功生命周期(理解不了的是,为什么到了现在glide仍然没有向Lifecycle转换的想法)。最终会生成一个RequestManager用来处理请求。绑定生命周期结束后,则对url进行保存,同时可以决定我们加载的图片类型,例如最后是请求的加载逻辑,首先glide会尝试去内存中获取图片数据,如果获取成功那么直接返回。...

2022-07-23 10:07:34 582 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 201

原创 android源码宇宙-Choreographer

Choreographer主要用来申请垂直脉冲信号,指导ViewRootImpl完成屏幕刷新讲Choreographer要从ViewRootImpl开始讲起应用在requestLayout,invalidate后都会开始调用ViewRootImpl.scheduleTraversals来调度Choreographer关于下图中的mTraversalRunnable,它会在适当的时机被Choreographer回调,回调后会依次执行ViewRootImpl.doTraversal方法--> performTr

2022-06-19 17:35:19 802

原创 android源码宇宙-StateFlow

![image.png](https://img-blog.csdnimg.cn/img_convert/5e6618079c5209c3b0e2107783b5adfc.png#clientId=ude8364ee-3cb9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=180&id=ua612e986&margin=[object Object]&name=image.png&originHeight=180&originWidth=547&origin

2022-06-18 09:09:06 520

原创 android源码宇宙-activity启动源码

Activity栈中的一个节点,用于展示一个Activity它集成了WindowToken实现了WindowManagerService中的一个接口既然如此顺便看看WindowToken吧用来替代ActivityStackSupervisor这东西是ActivityThread中的一个变量它可以作为一个测试框架的根基,因为它是先于我们的Application和Activity启动的,所以它可以监听到我们创建Activity和Application操作。android是支持自定义Instrumentation

2022-06-11 18:12:52 689

原创 android源码宇宙-android的Activity如何展示View

源码要点mContentParent:下文中的mContentParent实际类型是ActionBarOverlayLayout,是我们布局文件的直接父布局Activity的展示过程大概就是atms回调activity的启动方法,然后会进行初始化PhoneWindow、DecorView。初始化完成后会等待wms回调onResume的逻辑处理,这里的重点是我们的UI展示关键类ViewRootImpl,它就是在这里处理的,最后onResume中会进行activity以下五个回调方法的处理:onNewI

2022-05-21 08:40:40 666

原创 android源码宇宙-SystemServer源码阅读简单理解

欢迎关注我的公众号:安安安安卓因为一些中所不周知的原因,近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记,或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适,手动狗头。SystemServer老生常谈了,也不是啥重点,不过懂的话还是很有用的。这东西用来创建和管理系统服务,同时也可以管理我们的应用进程关于他们的源码分析,并不能只看他自己,需要从zygote开始查看,然后还要辅助app进程的启动来理解源码从Zygote到S.

2022-05-15 16:14:50 493 2

原创 android源码宇宙-Okhttp源码简单阅读

因为一些众所不周知的原因,近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记,或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适,手动狗头。Okhttp的使用源码阅读大纲同步调用网络请求流程异步调用网络请求流程Dispatcher类的代码逻辑几个拦截器的逻辑查看同步调用主流程从newCall开始调用RealCall.newRealCall创建CallRealCall.newRealCall因为.

2022-05-14 09:20:49 170

原创 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 639

原创 Jetpack Compose使用自定义操作符实现绘制五角星效果

公众号:安安安安卓说明compose中我们的所有ui操作,包括一些行为,例如:点击、手势等都需要使用Modifier来进行操作。因此对Modifier的理解可以帮助我们解决很多问题的自定义星行Modifier本文我们打算自定义一个Modifier,通过这个modifier我们可以实现用一个操作符就画出五角星的效果原理我们实现绘制五角星的原理如下图,首先我们会虚构两个圆,将内圆和外圆角度平分五份,然后依次连接内圆和外圆的切点的坐标,然后使用path绘制完成。实现代码中的实现涉及到自定义绘.

2022-04-16 11:56:44 1976

原创 compose 页面间参数正向反向传递方法

名词解释什么是正向反向参数传递呢正向:相当于一个Activity启动另一个Activity并向其传递参数;反向:相当于一个Activity退出的时候向启动它的Activity回传参数;思路本文主要讲反向参数传递,正向参数传递参考:正向参数传递起先关于这个问题是没什么思路的,网上(包括google官网)也没有相关说明,以至于公司新开的项目,虽然使用compose来写的,但是反向参数传递却是自定义的一个总线框架来做的。使用总线框架做明显是不合适的。基于这样一个原因,项目完成后我决定研究一下这

2022-04-07 18:29:16 1887

原创 使用RecycleView优雅的实现数据列表更新

近期需要对公司的祖传项目进行一些重构,在重构过程中涉及到多个列表的重构。老的列表中更新数据一直使用的notifyDataSetChanged进行数据的更新。从我入职时期这便是我的一大心病,因此这次一并解决问题描述关于notifyDataSetChanged的弊端,无需赘言,他会对 Recycleview 的整个列表进行刷新。因此在大数据量场景下(目前此种更新数据方法也不早再是官方推荐的了),这可能是很大的性能障碍。解决方案:使用 ListAdapter 进行局部刷新数据使用 DiffUtil.

2022-04-03 15:32:11 6474

原创 使用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 2598

原创 Compose中模仿Activity启动模式

关于启动模式我们都知道在activity体系中是有多种启动模式的:standard、singleTop、singleInstance、singleTask四种。但是在compose中因为是单activity所以自然是没有启动模式的说法的,因此本文我使用一些NavHostController的一些api来实现启动模式中的效果。standard默认的效果就是standard的效果singleTopcompose中我们可以通过判断顶部的页面是否是我们要启动的singleTop页面来处理。如果顶部页面是

2022-02-12 09:47:25 1223

原创 Compose中SnackerBar的使用

代码 val scope = rememberCoroutineScope() val scaffoldState = rememberScaffoldState() Scaffold(snackbarHost = { SnackbarHost(hostState = it) { data ->// Snackbar(// snackbarData = data,// backgr

2022-01-09 14:08:51 3017

原创 android事件流程图

2022-01-02 19:26:50 1336

原创 Compose中下拉框的使用

代码val datas = mutableListOf( "西瓜", "苹果", "芝麻", "狗熊") "西瓜", "苹果", "芝麻", "狗熊") DropdownMenu(expanded = true, onDismissRequest = { }, modifier = Modifier.width(100.dp)) { datas.forEach {

2022-01-01 10:36:17 1253

原创 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 1370

原创 Compose 自定义TextField实现自定义的输入框

概览众所周知Compose中默认的TextField和OutlineTextField样式并不能满足所有的使用场景,所以自定义TextField就成了必备技能,本文就揭露一下自定义TextField的实现。自定义TextField主要使用BasicTextField实现。简单自定义BasicTextField示例代码 var text by remember { mutableStateOf("简单的TextField") } BasicTextField(

2021-12-31 23:28:14 2491 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 1543

原创 协程知识总结

这篇是许久之前初学协程之时整理的笔记,今天偶然翻到便整理成md发出来。现在的我真的越来越难总结出这么多又臭又长的东西了。协程定义官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。协程与线程的区别协程是编译器级别的,线程是系统级别的优势协程就像轻量级的线程,线程是由系统调度的,线程的阻塞和切换开销都很大。而.

2021-12-31 23:22:35 951

原创 Jetpack Compose导航动画

页面导航动画是啥Compose的页面导航动画就相当于Activity中的页面切换动画,例如打开Activity时候进入的动画,关闭Activity时候的退出动画。后文所有提到导航的部分,都是指得Compose导航。页面导航实现的现状官方正式版的导航中并没有提供导航的动画,但是可能官方也发现了这个问题,因此官方目前正在开发独立于主框架的依赖项目(com.google.accompanist:accompanist-navigation-animation)方便开发者使用导航。依赖目前最新版本是:co

2021-12-29 05:21:30 1230 1

原创 Compose中下拉弹出框的使用

代码val datas = mutableListOf( "西瓜", "苹果", "芝麻", "狗熊") "西瓜", "苹果", "芝麻", "狗熊") DropdownMenu(expanded = true, onDismissRequest = { }, modifier = Modifier.width(100.dp)) { datas.forEach {

2021-12-26 14:40:04 870

原创 kotlin几个注解

注解@JvmField我们都知道kotlin默认会给var的变量生成get和set方法,当我们给变量复制或者获取变量值的时候实际上相当于调用了get和set方法。那么如果我们单纯的就是想设置变量值或者获取值,似乎就不需要默认生成get、set方法了。如下例子:class Person { var name: String="李白"//变量的get和set方法无论是否复写,都会被创建,但是实际上完全可以不需要, get() = field set(value)

2021-11-21 19:06:30 1633

原创 设计模式-工厂模式

概述工厂模式是一种创建型的设计模式,负责较为复杂的对象的创建三种工厂模式静态工厂、简单工厂、抽象工厂简单工厂本例代码中工厂会创建两个对象TaxiCar和TruckCark,需要给工程添加两个创建对象的方法public class SimpleFactory { static TaxiCar makeTaxiCar(){ return new TaxiCar(); } static TruckCar makeTruckCar(){ retur

2021-11-21 17:15:35 2056

原创 android Compose中ScrollableTabRow的使用

概述ScrollableTabRow就相当于以前开发中使用的TabLayout。属性介绍selectedTabIndex 当前选择的item的索引backgroundColor背景颜色indicator导航条的样式divider 分割线属性Tab用于实现单条的item简单实现代码@Composablefun Greeting() { val tabs = mutableListOf<String>( "安安安安卓", "鸿阳",

2021-11-07 08:53:28 1331

原创 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 4912 1

原创 android CameraX实现拍摄视频功能

关注公众号学习更多知识本篇文章的内容是上一篇拍摄照片内容的延续上一篇文章传送门: 嗖所用的工程代码也是和上一篇是相同的概览概念和简单的使用建议跳到上一篇文章去看https://juejin.cn/post/6968317886678958088使用(简单拍摄一段视频并展示)打开相机并设置相关参数private fun openCamera() { cameraProviderFuture = ProcessCameraProvider.getInstance(thi.

2021-09-29 10:50:24 1915

原创 算法题-字符串中的有效括号

leetcode链接:https://leetcode-cn.com/problems/valid-parentheses/题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:.

2021-09-25 20:33:40 228

原创 Android - JobService常用场景分析

概览JobScheduler是android系统提供的一个任务执行框架,通过JobScheduler我们可以根据不同的策略调度任务的执行。例如:指定任务可以在指定的网络下执行指定任务只在充电的状态下进行设置任务的截止时间指定延迟一段时间后执行任务指定任务在手机空闲的情况下执行如果app被杀死则无法最终执行任务,如果有重启后需要继续执行这种需要建议使用WorkManager使用基本使用创建自定义JobService并在manifest中配置class ExeTaskAfter2Se

2021-09-25 20:33:04 553

原创 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 2067 1

原创 android画月全食

实现方式想实现月亮发光效果需要使用的Paint类的setMaskFilter()方法,传入BlurMaskFilter对象实现高斯模糊发光。思路分析首先我们知道发生月全食的时候,月亮是完全被挡住的,但是他的周围会有一层光晕,这层光晕应该是一个黄色的渐变效果,通过MaskFilter我们可以设置光晕的半径和颜色,为了使效果更加逼真我们的demo给光晕加上一层透明度变化的动态效果代码思路变量的声明var vWidth = 0f var vHeight = 0f var step =1

2021-09-19 06:05:06 142

原创 android-Room通过大头儿子的故事讲讲对象关系

关注公众号学习更多知识概述sqlite是一个关系型数据库,因此对象关系就是重要的一部分,例如我们定义的数据中有森林和树木,森林包含树木。此时定义的森林中应该包含于一个树木的对象,这便是森林和树木的对象关系关系类型多个对象之间的关系有以下四种:一对一一对多多对多嵌套一对一举例:独生子 一个爸爸有一个儿子,这便是一对一的对对象关系代码class RoomRelativeActivity : CustomAdapterActivity() { private lateini

2021-09-13 07:29:37 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除