自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(3266)
  • 资源 (6)
  • 收藏
  • 关注

转载 一种简单的方式来实现弹幕效果

本文介绍了一种轻量级弹幕效果的实现方案。针对项目中需要简单弹幕功能但又不愿引入复杂第三方库的需求,作者创新性地采用RecyclerView结合StaggeredGridLayoutManager实现。该方案通过自定义DanMuView控件,利用scrollBy方法控制滚动速度,实现了多行弹幕的无限循环滚动效果。文章详细展示了核心代码实现,包括布局文件、适配器逻辑和Activity调用方式,并提供了控制弹幕启停的交互按钮。该方案适用于简单场景,具有代码简洁、易于集成的特点,为需要轻量级弹幕功能的开发者提供了实

2025-08-13 17:26:15 133

转载 Int类型添加dp2px功能方法

Kotlin扩展函数实现dp转px:通过为Int类型添加dp2px方法(如16.dp2px(context)),比工具类调用更简洁。内部使用TypedValue.applyDimension确保兼容性,支持Int和Float类型转换。注意context不能为空,频繁调用时应缓存结果,这是Kotlin推荐的实现方式。

2025-08-13 09:17:16 112

转载 实现Flexbox弹幕,FlexboxLayoutManager弹幕的实现

本文介绍了使用FlexboxLayoutManager实现Android弹幕效果的方法。首先需添加Flexbox库依赖,然后设计弹幕Item布局,创建弹幕数据类并实现适配器。核心是通过FlexboxLayoutManager配置弹幕排版规则,包括水平排列、自动换行等特性。Activity中初始化RecyclerView并模拟动态发送弹幕,还可通过动画效果和配置优化增强体验。该方法利用FlexboxLayoutManager的灵活排版能力,实现多行自适应的弹幕展示效果。

2025-08-12 17:57:01 107

转载 弹幕的两种实现及性能对比 | 自定义 LayoutManager

本文探讨了使用RecyclerView实现高性能弹幕效果的方案。作者通过自定义LayoutManager,解决了传统动画方案因预加载所有弹幕视图导致的性能问题。文章详细介绍了实现过程:1)自定义LayoutManager布局参数;2)初次填充弹幕的泳道算法;3)实现自动滚动逻辑;4)持续填充和回收弹幕的优化处理。通过复用RecyclerView的缓存机制,该方案显著提升了性能,GPU呈现模式下的表现更加流畅。文章强调深入理解源码对解决实际问题的重要性,并提供了完整代码链接。

2025-08-12 17:31:12 49

转载 弹幕的两种实现及性能对比 | 自定义控件

本文介绍了两种Android弹幕实现方案中的第一种——基于自定义ViewGroup的动画方案。该方案通过LaneView控件管理弹幕视图,采用泳道(Lane)概念随机分布弹幕位置,使用ValueAnimator实现从右向左的平移动画。文章详细阐述了弹幕控件的实现细节,包括视图缓存池(Pool)、测量布局、动画控制、点击事件处理等优化手段。同时指出了该方案的性能瓶颈:当大量弹幕视图同时构建时,会导致measure/layout耗时过高,影响列表流畅度。文章最后预告将介绍另一种性能更优的实现方案。

2025-08-12 17:13:37 51

转载 Kotlin 全新特性:“上下文参数” 应用场景介绍

Kotlin 2.2.0 正式引入上下文参数(ContextParameters)作为预览特性,这是对原实验特性上下文接收器(ContextReceivers)的命名和语法改进。该特性允许函数声明多个接收器参数,提供更灵活的作用域控制。文章回顾了其发展历程,从扩展函数到多接收器概念,详细介绍了新语法规则(如强制命名参数)和8个典型应用场景,包括DSL构建、依赖注入、协程集成等。同时指出使用时应遵循命名规范、控制参数数量等最佳实践,并展望了该特性未来的发展方向。上下文参数为Kotlin代码组织提供了新的可能性

2025-08-11 17:22:39 49

转载 TextView 边界Emoji表情显示不完整

摘要:TextView设置文本时,默认使用BufferType.NORMAL,可能导致表情显示不完整。通过使用setText(text, BufferType.SPANNABLE)方法可以解决这个问题,其中BufferType.SPANNABLE能更好地处理富文本内容。这种方法比单参数的setText()更灵活,适用于需要特殊格式显示的文本内容。

2025-08-11 15:26:01 33

转载 Kotlin协程:别再只会 launch 和 async

本文系统介绍了Kotlin协程的核心概念与常见误区。协程是轻量级线程,通过挂起机制实现非阻塞异步处理,具有结构化并发、生命周期可控等优势。文章详细解析了协程的基本组成(CoroutineScope、launch/async、suspend函数等)、调度器选择(Default/IO/Main等)、线程切换方式(withContext)以及常见错误(如GlobalScope导致内存泄漏)。重点对比了launch、async、withContext的区别,并强调了结构化并发的重要性。最后指出协程应在ViewMod

2025-08-08 17:01:41 73

转载 Arouter如何获取 PendingIntent

本文探讨了在模块化开发中使用ARouter传递PendingIntent的解决方案。当跨模块页面跳转需要PendingIntent时,通过ARouter获取目标Activity的Class对象,避免直接引用类名导致的耦合问题。具体实现步骤包括:使用ARouter构建Postcard对象,获取目标Activity的Class,创建Intent并附加参数Bundle,最后生成PendingIntent。这种方法有效解决了模块间页面跳转的耦合问题,适用于通知跳转等场景。

2025-08-08 16:58:54 36

转载 ARouter 获取 Intent

摘要:ARouter通过Postcard获取目标Activity的Intent,实现页面跳转和参数传递。关键步骤是通过LogisticsCenter.completion()初始化路由信息,再使用postcard.getDestination()获取目标类名创建Intent。这种方式避免了直接依赖类路径,降低耦合度,适用于需要自定义Intent或与其他框架集成的场景。可传递简单参数或通过Bundle/Parcelable传递复杂数据。

2025-08-08 16:56:59 53

转载 补间动画Animation的applyTransformation方法应用

Android补间动画中的applyTransformation方法用于自定义动画变换逻辑。该方法在每一帧被调用,通过interpolatedTime获取动画进度,利用Transformation对象存储变换矩阵和透明度值,实现几何变换和透明度效果。开发者可重写该方法实现缩放、旋转等自定义动画,需注意设置变换原点并与插值器配合使用。与属性动画不同,补间动画仅改变View的绘制效果而非实际属性。该方法适用于实现系统未提供的动画效果,但需避免复杂计算以保证性能。

2025-08-07 16:49:20 51

转载 反方向画弧

Android中绘制反方向(逆时针)弧形的方法是在Canvas.drawArc()方法中使用负数的sweepAngle参数。默认正数表示顺时针方向,负数表示逆时针方向。通过自定义View示例展示了两种方向的弧形绘制效果:蓝色顺时针弧形(sweepAngle=90)和红色逆时针弧形(sweepAngle=-90)。代码中使用相同RectF边界确保公平对比,0°起点为右侧水平方向。通过调整startAngle和正负sweepAngle可灵活控制弧形范围和方向,适用于仪表盘、进度条等复杂效果。

2025-08-07 10:55:07 57

转载 paint线条末端的圆角效果,线段端点平角和圆角

在Android中,通过Paint的setStrokeCap()方法可以设置线段端点的弧度效果。其中Paint.Cap.ROUND参数可使线段终点呈现圆角,弧度半径等于线宽的一半。示例代码展示了BUTT(平角)、ROUND(圆角)和SQUARE(方角)三种端点样式的区别,圆角效果会随线宽增大而更明显。使用时需注意:1)线宽决定弧度大小;2)需开启抗锯齿使边缘平滑;3)该设置对所有绘制线条生效。如需仅终点有弧度而起点保持平角,需通过Path手动控制绘制逻辑。

2025-08-07 10:38:13 60

转载 layer-list指定位置和宽高

Android的layer-list通过<item>标签属性实现多层Drawable叠加效果,关键属性包括width/height控制尺寸,left/right/top/bottom控制偏移位置,gravity设置对齐方式。示例展示了固定图标居中、带偏移阴影和负偏移发光等效果,注意层级关系中靠后的item会覆盖前面的。通过合理组合这些属性,无需自定义View即可实现复杂叠加效果。

2025-08-06 19:00:29 56

转载 recyclerview GridLayoutManager 间隔线实现ItemDecoration

RecyclerView中使用GridLayoutManager时,可以通过自定义GridSpacingItemDecoration类实现网格间隔线。该类支持设置列数、水平/垂直间距及是否包含边缘间隔。通过重写getItemOffsets方法,根据item位置动态计算间隔值。使用时需先设置GridLayoutManager,再添加间隔线装饰器,并可选择边缘是否留白。该方法灵活适配不同UI需求,但需注意水平/垂直方向调整和spanSize特殊情况处理。辅助提供了dp转px工具方法确保多设备适配。

2025-08-06 18:04:05 91

转载 aliplayer播放器播放带透明度视频,直播间礼物动效

阿里云播放器SDK新增透明视频播放功能,支持渲染Alpha通道,实现直播间透明礼物动效展示。该功能需使用SDK 6.8.0及以上版本,支持MP4格式透明视频,具有文件体积小、兼容性强、动效质量高等优势。开发者可通过设置alpha渲染模式、调整播放器视图透明度等接口实现功能,示例代码展示了TextureView和SurfaceView两种实现方式。该技术可提升用户观看体验,避免特效遮挡直播内容。

2025-08-06 15:30:40 64

转载 资深Android开发者必备资源:保持技术敏锐度,提升职场竞争力

本文介绍了"技术信息金字塔"模型,帮助Android开发者高效获取技术资讯。金字塔分为三层:底层关注开发者社区趋势(如AndroidWeekly、Reddit社区);中层追踪Google官方动态(开发者通讯、示例代码库);高层把握移动行业趋势(设备新闻、应用商店榜单)。该模型强调质量而非数量,帮助开发者在技术领导岗位上保持竞争力,同时平衡业务需求与技术创新。

2025-08-05 18:11:23 36

转载 Kotlin知识体系(七) : Flow线程控制、状态管理及异常处理指南

本文介绍了Kotlin Flow的线程调度、状态管理、生命周期管理和异常处理机制。在线程调度方面,通过flowOn操作符和协程上下文实现灵活线程切换。状态管理部分对比了StateFlow(状态持有)和SharedFlow(事件广播)的特性及使用场景。生命周期管理重点讲解了repeatOnLifecycle的机制,避免UI非活跃状态下的资源浪费。异常处理章节详细解析了catch、retry、retryWhen等操作符的精准控制策略,以及onCompletion的资源清理作用。文章还提供了与Jetpack Co

2025-08-05 15:30:48 61

转载 Kotlin开闭原则真香警告

开闭原则(OCP)是SOLID原则之一,主张软件实体应对扩展开放、对修改关闭。文章通过形状绘制和OTP验证系统的案例对比,展示了违反OCP的代码(需频繁修改)与符合OCP的设计(通过接口扩展)的差异。Kotlin中可利用接口、扩展函数和密封类优雅实现OCP。该原则适用于需频繁扩展的支付、日志等系统,但不推荐用于稳定需求或原型阶段。OCP与其他SOLID原则相辅相成,共同构建可维护的软件架构。

2025-08-04 18:02:40 31

转载 Java 文件如何重命名

Java文件重命名方法比较:1)传统File.renameTo()简单但不跨文件系统,仅返回布尔结果;2)NIO的Files.move()功能更强大,支持跨文件系统操作和异常处理,可指定覆盖选项。后者提供更详细的错误信息,推荐优先使用。两种方法都支持跨目录重命名,但Files.move()在文件存在、权限不足等情况下的处理更完善。

2025-08-04 17:57:16 147

原创 nio FileChannel下载写入文件示例

nio FileChannel下载写入文件示例

2025-08-04 09:52:50 71

转载 获取Instant毫秒值

Java/Kotlin中Instant类的toEpochMilli()方法可将UTC时间转换为Unix纪元时间的毫秒级时间戳。该方法适用于时间比较、差值计算等场景,但需注意null检查和精度问题(会截断纳秒部分)。文章提供了获取当前时间和文件创建时间毫秒值的代码示例,并解释了毫秒时间戳的含义和使用场景。对于需要更高精度的情况,建议使用getEpochSecond()结合getNano()方法计算。

2025-08-02 18:43:09 59

转载 Kotlin 查文件创建日期

Kotlin中获取文件创建日期可通过Java NIO的Files和BasicFileAttributes类实现。核心步骤包括:使用Paths.get()转换路径,Files.readAttributes()读取文件属性,BasicFileAttributes.creationTime()获取创建时间,并通过DateTimeFormatter格式化输出。注意处理文件不存在、权限不足等异常情况。该方法兼容主流文件系统,但老旧系统可能不支持创建时间属性。使用时需确保文件路径有效且程序有访问权限。

2025-08-02 18:38:19 50

转载 Kotlin知识体系(七) : Flow线程控制

本文介绍了Kotlin协程中Flow的线程切换控制方法。通过flowOn操作符可以灵活改变上游操作的执行线程(如使用Dispatchers.IO处理网络请求),而不影响下游操作。collect操作的线程由调用它的协程上下文决定(如viewModelScope默认在主线程)。同时,可以在收集时使用withContext切换线程处理耗时任务。合理结合flowOn和协程调度器能实现流畅的异步数据流处理,确保耗时操作在后台线程执行,UI更新在主线程完成。

2025-08-02 17:48:58 44

转载 java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决

摘要:文章分析了在文件备份、传输和解压过程中出现"文件损坏"错误的原因。问题出现在下载大文件时采用固定字节数组读取方式(10KB),导致可能未完整读取文件。正确的解决方法是采用更小的512字节缓冲区,并正确处理文件末尾的剩余数据。作者通过优化后的代码实现了稳定传输,强调处理字节流时应避免一次性读取过多数据,并确保完整读取文件内容。该案例对处理文件传输和流操作具有参考价值。

2025-08-02 16:34:21 39

转载 Retrofit上传/下载文件

本文介绍了使用Retrofit 2.0.2实现文件上传和下载的方法。文件上传通过@Multipart注解和MultipartBody.Part封装文件数据;文件下载使用@GET请求,并通过@Streaming注解避免大文件内存溢出问题。作者还指出默认实现无法显示进度,并预告将在后续文章中介绍如何扩展进度监听功能。文章提供了具体的接口定义和实现代码示例,包括文件上传的表单封装和下载文件的异步保存处理。

2025-08-02 15:33:49 89

转载 Retrofit(重构——下载大文件)

Retrofit下载大文件

2025-08-02 15:27:01 25

转载 aliplayer播放器状态监听

Android播放器SDK提供了完整的播放状态监听机制,主要包括OnErrorListener(错误回调)、OnCompletionListener(播放完成回调)、OnLoadingStatusListener(加载状态回调)和OnInfoListener(播放信息回调)等重要监听器。开发者可通过这些监听器获取播放进度、缓存位置、网络加载状态等关键信息,并在出现错误时及时处理。此外,SDK还支持通过onStateChanged回调实时监控播放器状态变化(如准备完成、开始播放、暂停等状态),为播放控制提供完

2025-08-02 11:20:37 37

转载 LitePal 简介与使用

LitePal是一款轻量级Android ORM框架,由郭霖开发,通过对象映射简化SQLite操作。核心功能包括自动建表、增删改查API和数据库版本管理。使用步骤包括添加依赖、配置litepal.xml文件、定义实体类和初始化框架。支持注解配置表结构,提供链式API进行数据操作,并能自动处理数据库升级。该框架显著降低了Android数据库开发门槛,适合中小型项目开发。最新版本采用LitePalSupport基类和注解方式,开发者无需编写复杂SQL语句即可完成大多数数据库操作。

2025-08-01 20:59:26 90

转载 git删除某个提交

Git中删除提交需要根据是否已推送到远程仓库选择不同方法。对于本地未推送的提交,可通过交互式rebase(git rebase -i)直接删除;已推送的公共分支建议使用git revert创建反向提交,安全保留历史记录;私人分支可强制推送修改后的历史(rebase + push --force-with-lease),但需谨慎处理避免团队协作冲突。关键原则是修改公开历史前需评估影响,优先采用不影响他人工作的方式。

2025-08-01 14:21:08 87

转载 音视频播放库:wlmedia(透明效果)

《WLMedia:Android/HarmonyOS音视频播放SDK》是一款功能丰富的跨平台播放器组件,支持手机、车机、电视、手表等多种设备。开发者只需简单配置即可快速集成,具有以下核心特性:1. 提供WlSurfaceView和WlTextureView两种渲染视图,支持视频缩放/旋转/镜像等效果;2. 支持本地文件/网络流媒体播放,提供硬/软解码选项;3. 包含完整的播放控制API(播放/暂停/seek/音量调节等);4. 支持音频PCM回调、视频截图、多音轨切换等高级功能。该SDK通过JitPack依

2025-08-01 14:20:55 39

转载 播放透明视频

本文介绍了实现视频透明效果的原理与方法,重点讲解了两种技术方案:通过颜色过滤实现绿幕效果,或使用包含alpha通道信息的定制视频。文章推荐使用第三方库wlmedia快速实现透明视频播放,详细说明了SDK集成步骤和关键代码,包括设置背景透明、启用alpha通道处理等功能。该技术适用于需要视频与UI叠加显示的场景,如直播特效等,原理可跨平台应用。文末提供了GitHub示例项目地址供参考。

2025-08-01 12:06:29 51

转载 透明视频的实现(适用于直播间全屏礼物、弹屏广告等场景)

本文探讨了在Android平台上实现透明视频播放的三种方案对比。通过分析帧动画、SVGA格式和视频方案,指出视频方案在文件体积(从5M降至几百K)、性能优化(避免内存飙升)和兼容性方面具有显著优势。具体实现方法是将原始视频与黑白alpha通道视频拼接,通过OpenGL着色器重组RGB和alpha数据。虽然存在分辨率限制,但该方案在带宽节省、播放流畅度和设计友好度上表现优异,是目前Android透明视频播放的最佳实践方案。

2025-08-01 12:02:50 96

转载 RecyclerView 中实现边缘渐变效果

本文介绍了在RecyclerView中实现边缘渐变效果的两种方法。基础方案通过添加顶部和底部的渐变遮罩View实现,优点是不需要修改RecyclerView本身且适配性强。进阶方案则利用RecyclerView的padding和clipToPadding属性配合背景渐变实现,无需额外View,更加轻量化。两种方法都支持调整遮罩高度、颜色和方向(可适配横向滚动)。方案一适合复杂背景,方案二适合纯色背景,开发者可根据实际需求选择。

2025-07-31 11:55:25 89

转载 当Kotlin的object不再是单例时:那些你可能不知道的陷阱

摘要:Kotlin的object关键字虽然能保证单例模式,但序列化过程可能破坏这一特性。Gson通过反射创建新实例,导致单例失效;而kotlinx.serialization能正确识别单例对象并保持引用。Moshi则直接拒绝序列化object对象。使用单例对象时需注意序列化框架的选择,推荐优先使用kotlinx.serialization以避免单例被破坏。(150字)

2025-07-31 11:54:59 38

转载 日志打印中的隐性开销

日志函数中看似简单的开关控制实则存在性能隐患。即使日志关闭,字符串拼接、对象序列化和格式化操作仍会在调用时执行,产生不必要的内存和CPU开销。通过将日志内容封装在Lambda表达式并用inline标记,可以确保日志构建逻辑只在开关开启时执行。性能测试显示,这种优化在复杂场景下能显著降低资源消耗,避免因日志累积导致的应用卡顿或崩溃。建议开发者在关键路径上优先考虑这种延迟执行的日志方案,在保证调试便利性的同时提升性能表现。

2025-07-31 11:54:21 37

转载 画中画窗口的“最大化”和“关闭”按钮点击鉴别

本文介绍了如何区分Android画中画模式下用户点击"最大化"和"关闭"按钮的方法。虽然系统未提供直接区分方式,但通过观察发现,两种操作会触发不同生命周期状态:点击"关闭"时页面处于CREATED状态,而点击"最大化"则处于STARTED状态。作者验证了通过重写onPictureInPictureModeChanged方法,结合生命周期状态判断,可以准确区分用户意图。该方法已在StackOverflow上被提出并验证有效。

2025-07-31 11:53:38 27

转载 ViewPager或ViewPager2调用 setCurrentItem(position) 不触发 onPageSelected 回调

ViewPager和ViewPager2使用setCurrentItem()时onPageSelected回调不触发的解决方案 摘要:使用ViewPager或ViewPager2时,setCurrentItem()不触发onPageSelected回调通常由四种原因导致:监听器注册时机不当、目标位置与当前页相同、ViewPager2接口差异或页面未初始化完成。解决方案包括:1)确保先注册监听器再调用setCurrentItem;2)处理位置相同时手动触发回调;3)使用post延迟确保页面初始化完成;4)避免

2025-07-31 11:53:10 108

转载 去掉ViewPager2滑动到边缘时的阻尼效果

摘要:本文介绍了如何去除ViewPager2滑动到边缘时的阻尼效果。通过反射获取ViewPager2内部的RecyclerView实例,调用setOverScrollMode(View.OVER_SCROLL_NEVER)方法禁用过度滚动效果。实现时需注意使用ViewTreeObserver确保初始化完成,并提供了备选方案通过遍历子视图获取RecyclerView的方法。该方案适用于需要更流畅滑动体验的场景,但需注意版本兼容性问题。

2025-07-31 11:52:45 53

转载 资源图片模糊效果实现

Android图片模糊处理方案 摘要:本文介绍了三种实现Android资源图片模糊效果的方法:1. 使用Coil库的BlurTransformation,简单高效;2. 通过原生RenderScript处理,不依赖第三方库;3. 自定义快速模糊算法,兼容低版本设备。每种方案均提供代码示例,并强调性能优化注意事项,如缩小图片尺寸、异步处理、及时回收Bitmap等。开发者可根据项目需求选择适合的方案实现资源图片模糊效果。

2025-07-31 11:52:20 26

jdk-6u45-linux-x64.part1

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

ormlite-4.48

Android中用ormlite实现持sqlite持久化 共含三个jar包 ormlite-android-4.48.jar ormlite-core-4.48.jar ormlite-jdbc-4.48.jar

2014-11-29

二维码扫描ZxingDemo

一个二维码扫描例子

2016-04-06

jdk-6u45-linux-x64.part2

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

空空如也

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

TA关注的人

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