自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ViewModel原理分析

ViewModel 是一种用来存储和管理UI相关数据的类。

2024-06-06 17:04:41 890 1

原创 对比 delay() 和 sleep()

Kotlin 语言中的协程 Coroutine 极大地帮助了开发者更加容易地处理异步编程。就 JVM 的角度而言,协程一定程度上减少了“回调地狱”的问题,切实地改进了异步处理的编码方式。Coroutine 中封装的诸多高效 API,可以确保开发者花费更小的精力去完成并发任务。今天就来对比一下 Coroutine 中的 delay() 和 Java 语言中的 sleep()。

2024-06-04 14:19:16 627

原创 Kotlin 特色 sealed 关键字

sealed 意为密封的,可修饰类 class 和接口 interface,用来表示受限的继承结构。

2024-05-30 16:07:28 1122

原创 Compose 中的 touch 事件

pointerInput 为 Compose 中处理所有手势事件的入口,可以编写自己的手势处理程序来自定义手势。和原生开发中的 touch 事件一样,经由抵达以及实际根 View 的DecorView。经由 ViewGroup 的分发抵达 Compose 最上层的的。将转化为类型并交由处理。处理过程中先调用的记录 touch 事件的分发路径。接着调用执行分发,并按照两个步骤抵达 Compose 的各层 Node:步骤一:首先调用进行Initial和Main策略的事件分发。这其中会调用各。

2024-05-29 18:20:19 1095

原创 Compose滑动删除

在使用原生开发的时候,Android为了仿照iOS的左滑删除菜单,有一些好用的三方库,比如SwipeRevealLayout,可以实现侧滑删除。当转向Compose开发,如何实现滑动删除功能呢?找了一圈,找到了Material3自带方式和另外两个三方库,有各自不同的效果,可以根据需要的效果来选择使用哪种方式。

2024-04-09 15:12:31 686

原创 Compose 中的附带效应

附带效应是指发生在可组合函数作用域之外的应用状态的变化。由于可组合项的生命周期和特性(例如可组合函数可以按任何顺序执行、可组合函数可以并行运行、重组会跳过尽可能多的内容),可组合项在理想情况下应该是无附带效应的。不过,有时附带效应是必要的,例如,触发一次性事件(例如显示信息提示控件),或在满足特定状态条件时进入另一个屏幕。这些操作应从能感知可组合项生命周期的受控环境中调用。这就需要使用Jetpack Compose 提供的不同附带效应 API。

2024-04-03 14:51:49 745

原创 十二生肖分享

十二生肖,又叫属相,是中国与十二地支相配以人出生年份的十二种动物,包括鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。

2024-03-05 11:12:06 803

原创 Compose Navigation使用

如果使用纯Compose开发Android应用,在页面导航方面navigation-compose几乎是唯一选择。介绍一下navigation-compose的简单使用。

2024-01-12 12:45:24 1249

原创 Kotlin高阶函数

高阶函数是指可以接收其他函数作为参数,或者返回一个函数的函数。在许多编程语言中,高阶函数都是一种重要的编程方式,因为它们提供了更高的抽象层次,使得代码更加模块化、易于理解和维护。为什么一个函数能接收另一个函数作为参数呢?因为Kotlin中新增了函数类型,将这种函数类型添加到一个函数的参数声明或者返回值声明当中,那么该函数就是一个高阶函数了。

2023-12-11 13:47:02 90

原创 Android集成Flutter模块经验记录

记录Android原生项目集成Flutter模块经验,其中不乏一些踩坑,也是几番查找资料之后才成功运用于实际开发。主要为了记录,将使用简洁的描述。

2023-11-29 15:35:04 213

原创 Flutter动画学习之实践

在上一篇文章中了解了Animation、Curve、Controller、Tween在Flutter中动画中最主要的四个角色。本篇文章就开始实践。

2023-11-07 20:10:09 124

原创 Flutter动画学习之简介

在动画开始执行后开始生成动画帧,屏幕每刷新一次就是一个动画帧,在动画的每一帧,会随着根据动画的曲线来生成当前的动画值(Animation.value),然后根据当前的动画值去构建UI,当所有动画帧依次触发时,动画值会依次改变,所以构建的UI也会依次变化,所以最终我们可以看到一个完成的动画。其中一个比较常用的Animation类是Animation。Flutter中的动画系统是基于Animation对象的,widget可以在build函数中读取Animation对象的当前值, 并且可以监听动画的状态改变。

2023-10-30 20:01:00 70

原创 NestedScrollView嵌套WebView置顶问题

NestedScrollView嵌套WebView,且WebView上方还有其他View布局,WebView加载h5页面,在h5页面使用了下拉框,可点击,点击展开内容,点击操作这些都是h5页面处理的,跟原生没有交互。当进入该页面的时候,展示正常,且NestedScrollView可正常滑动,当在h5页面点击下拉框时,NestedScrollView触发滚动,将WebView置顶了。原因是因为在h5页面点击操作时抢占了焦点,从而出现了置顶的情况。

2023-10-24 19:14:35 238

原创 Flutter 异常捕获

Zone表示一个代码执行的环境范围,不同的Zone代码上下文是不同的互不影响。类似一个代码执行沙箱,不同沙箱的之间是隔离的,沙箱可以捕获、拦截或修改一些代码行为,如Zone中可以捕获日志输出、Timer创建、微任务调度的行为,同时Zone也可以捕获所有未处理的异常。使用try-catch进行异常捕获,捕获到异常时,创建一个ErrorWidget弹出提示。虽然代码出现了错误,但是并不会导致APP崩溃,Flutter会帮我们捕获异常。如果我们想自己上报异常,只需要提供一个自定义的错误处理回调即可。

2023-09-15 09:34:52 245

原创 Android基于MLKit实现条形码扫码

最近遇上了扫描条码的需求,在查找资料过程中不是那么地顺利,做个笔记,记录下这两篇文章,前人栽树后人乘凉。本篇文章在上一篇文章中,讲到了基于ZXing实现二维码生成&扫描,其中扫描二维码分为使用相机扫描二维码和从相册中识别二维码图片两部分,但是从相册中识别二维码图片,发现存在识别失败的问题,尤其是商品条形码,使用相机扫描商品条形码是可以正常扫描识别出来的,但是将商品条形码拍照保存进相册,使用从相册中识别二维码图片方法,却出现识别失败的情况。为此,又去查找了其他的资料,本篇借助开源库。

2023-08-20 14:56:52 674

原创 Andorid基于ZXing实现二维码生成&扫描

说到二维码,大量的资料都会提到ZXing,具体见ZXing,这是一个用Java语言实现的1D/2D 条形码图像处理库。涉及专业知识不多做介绍,这篇文章只讲使用。

2023-08-20 14:56:08 865

原创 ARouter基本使用及原理分析

ARouter是阿里开源的一款帮助Android App进行组件化改造的路由框架,是Android平台中对页面和服务提供路由功能的中间件,可以实现在不同模块的Activity之间跳转。ARouter的特点是灵活性强还能帮助项目解耦。ARouter使用@Route注解,在编译时期通过APT技术生成类文件用于存储path和activityClass的映射关系。在app进程启动的时候会拿到这些类文件,把里面存储的映射关系数据读到内存里,保存在路由表map中。

2023-08-15 15:17:19 397

原创 在Compose Text中插入图片inlineContent

在Android原生开发的时候,想要实现在TextView中插入图片,有多种方式可以实现:- 在xml文件中可以直接使用drawableEnd等属性- 在代码里可以使用setCompoundDrawables、setCompoundDrawablesWithIntrinsicBounds等方法- 使用ImageSpan定制插入图片

2023-07-24 19:54:52 319

原创 Android通过国家名称获取对应的国旗Emoji

遇到一个需求需要通过国家名称,如"CN"、"US",来展示国家的国旗Emoji标志。"CN"展示中国国旗Emoji🇨🇳,"US"展示美国国旗🇺🇸,这在输入法表情里其实很常见。

2023-07-21 19:32:43 307

原创 自定义圆弧进度条(Kotlin&Compose)

开始使用compose了之后才发现一些以前需要自定义的view,洋洋洒洒几十上百行的代码,需要自定义布局属性,需要继承View,需要使用Paint,如果使用Compose,直接一个方法二十行即可解决。

2023-07-07 19:28:56 285 1

原创 Calendar.WEEK_OF_MONTH跟着系统语言变?

项目之前开发了一个日历功能,有使用到Calendar.WEEK_OF_MONTH去获取在当前月的第几周,项目本身有做多语言适配,发现Calendar.WEEK_OF_MONTH会跟随系统语言有不一样的效果,这不bug就来了,赶紧排查问题。

2023-07-03 17:34:43 108 1

原创 Kotlin之returns和jumps

最近遇到在循环中达到某个条件之后需要退出循环的需要,在Kotlin的foreach中使用return@forEach竟然有坑,因此特地写下该篇文章记录下来。在Kotlin的foreach中使用return@forEach是类似continue的效果,跳转至循环的下一步,如果要跳出循环,需要在循环外面标记run loop@{},然后使用return@loop跳出循环。进入正文。

2023-06-21 11:25:58 406

原创 Android屏幕刷新机制

由于主线程做了一些相对复杂耗时逻辑,导致CPU和GPU的处理时间超过屏幕刷新一帧的时间,由于此时back buffer写入的是B帧数据,在交换buffer前不能被覆盖,而frame buffer被Display用来做刷新用,所以在B帧写入back buffer完成到下一个VSync信号到来之前两个buffer都被占用了,CPU无法继续绘制,这段时间就会被空着,于是又出现了三缓存。当显卡帧率大于屏幕刷新频率,屏幕准备刷新第2帧的时候,GPU 已经在生成第3帧了,就会覆盖第2帧的部分数据。

2023-06-02 16:15:55 542 1

原创 Android SplashScreen API使用

在Android 12 出现了一个SplashScreen新功能,它为所有应用添加了新的应用启动动画,可以通过SplashScreen API来定制专属应用启动动画。

2023-01-18 16:40:27 1691

原创 Compose动画学习之AnimationSpec

在上一篇文章Compose开箱即用的动画API中,在compose动画的学习使用过程中,有一个参数属性一直存在,那就是AnimationSpec。不管是用于为单个值添加动画效果的animate*AsState,还是用于为多个值添加动画效果的updateTransition,亦或是一些封装好的高级别动画API:animatedContentSize、AnimatedVisibility,在这些里面都存在着AnimationSpec这个参数属性。

2022-12-03 19:00:24 396

原创 Compose开箱即用的动画API

这篇文章介绍一些Compose官方已经封装好的,可以开箱即用的动画API。

2022-12-03 18:49:07 489

原创 Android TextView实现超过固定行数折叠内容

这次的小需求是,当TextView中的内容超过固定行数时,需要折叠内容显示…并在后面拼接show more字样,点击之后将折叠内容全部展示并在后面拼接hide字样。

2022-11-25 15:32:41 1070

原创 AndroidX Media3之ExoPlayer简单使用(2)

在上一篇文章中介绍了ExoPlayer的简单使用,运用了media3-ui包中提供的关于ExoPlayer的UI组件和资源。但是在日常开发中,播放器的界面会被要求为各式各样的,没有办法使用media3-ui包中提供的通用界面。在这篇文章将介绍如何自己实现一个简单的PlayerView。

2022-11-19 21:33:56 2610

原创 AndroidX Media3之ExoPlayer简单使用(1)

ExoPlayer是谷歌开源的一个应用级的音视频播放器。Media3 是 Android 媒体支持库的新家,里面包括了 ExoPlayer,目前仍处于Beta 版阶段。

2022-11-15 17:59:27 4571

原创 学习Android启动初始化 App StartUp

StartUp是为了App的启动提供的一套简单、高效的初始化方案。

2022-09-04 14:04:30 1830

原创 Android通知 Notification的简单使用

在Android应用的开发中,必然会遇上通知的开发需求,本文主要讲一下Android中的通知 Notification的简单基本使用,主要包含创建通知渠道、初始化通知、显示通知、显示图片通知、通知点击、以及配合WorkManager发送延迟通知。

2022-08-21 15:36:22 1226

原创 Kotlin 监听键盘显示隐藏

最近碰上了需要监听键盘显示和隐藏,在Kotlin场景下封装了一个扩展方法,方便日后使用。

2022-07-31 13:45:12 754

原创 Android Activity Result API使用

在Android开发中时常需要用到跳转新页面获取结果回传数据,一直以来使用的方法就是startActivityForResult和onActivityResult两个方法,但是startActivityForResult方法却已经被deprecation,官方推荐使用ActivityResultAPI。......

2022-07-21 22:50:18 1253

原创 剖析Android shape标签的绘制

作为Android开发,shape标签的使用定然不陌生。shape标签可用于各种背景绘制,然而每需要一个新的背景,即使只有细微的改动,诸如一个角度的改变、颜色的改变,都需要重新创建一个xml文件以配置新背景的shape标签。...

2022-06-18 19:45:45 2116

原创 37%法则

37%法则没有完美的选择,只有最优的策略麦穗理论不求最好,但求更好传说古希腊哲学大师苏格拉底的3个弟子曾求教老师,怎样才能找到理想的伴侣。于是苏格拉底带领弟子们来到一片麦田,让他们每人在麦田中选摘一支最大的麦穗——不能走回头路,且只能摘一支。第一个弟子刚刚走了几步便迫不及待地摘了一支自认为是最大的麦穗,结果发现后面的大麦穗多的是;第二位一直左顾右盼,东瞧西望,直到终点才发现,前面最大的麦穗已经错过了;第三位把麦田分为三份,走第一个1/3时,只看不摘,分出大、中、小三类麦穗,在第二个1/3里验证是否

2022-05-14 20:35:49 2037 1

原创 初识Kotlin协程

协程可以让我们使用顺序的方式去写异步代码,而且不会阻塞UI线程。Kotlin 协程提供了一种全新处理并发的方式,你可以在 Android 平台上使用它来简化异步执行的代码。协程从 Kotlin 1.3 版本开始引入,但这一概念在编程世界诞生的黎明之际就有了,最早使用协程的编程语言可以追溯到 1967 年的 Simula 语言。在过去几年间,协程这个概念发展势头迅猛,现已经被诸多主流编程语言采用,比如 Javascript、C#、Python、Ruby 以及 Go 等。Kotlin 协程是基于来自其他语言的

2022-04-23 22:08:33 2148

原创 Permission Denial: requires android.permission.INTERACT_ACROSS_USERS_FULL

今天在开发调试时,出现了奇怪的crash情况,在华为手机和google手机上会出现,在其他手机上却不会出现,报错日志如下:Caused by: java.lang.SecurityException: Permission Denial: checkClipboardServiceCallingUser from XXXXX asks to run as user 2857214 but is calling from uid u0a327; this requires android.permissio

2022-04-18 20:15:29 3704

原创 Android TextView 动态设置缩进距离

需求是需要在TextView前端加入一个标签展示。最终效果图如下:根据效果图,很容易就能想到使用SpannableStringBuilder,在这里使用到的就是LeadingMarginSpan这个类了。官方说明:A paragraph style affecting the leading margin. There can be multiple leading margin spans on a single paragraph; they will be rendered in order

2022-04-12 16:05:11 3105

原创 使用笔记:DataBinding在Kotlin中的使用

使用笔记:DataBinding在Kotlin中的使用DataBinding是一个实现数据和UI绑定的框架,同时也是实现MVVM模式所依赖的工具。今天文章主要记录一下DataBinding在Kotlin中的简单使用Demo下载配置在应用的build.gradle文件中添加以下代码:android { ... dataBinding { enabled = true } ...}基本使用功能替代findViewById布局文件根节点必

2022-04-11 22:32:28 5202

空空如也

空空如也

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

TA关注的人

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