XYH Blog

一板一眼就会滋生弱点

Android 侧滑菜单的实现思考

SwipeMenuLayout

前言 本文的由来是群里有好几个群友在咨询关于RecyclerView侧滑菜单的功能,虽然在Github上有很多案例,但是对于实现一个带侧滑功能的Layout没有很好的说明,于是决定写这篇博客来记录一下一个侧滑的Layout怎么实现。 本文涉及到的内容: ViewDragHelper 自定义ViewGroup 效果图 实现流程 首先这种效果是侧滑菜单放在内容View...

RecyclerView Item倒计时设计的思考

RecyclerView Countdown

前言 RecyclerView Item倒计时这个需求比较常见于商品的秒杀,活动的预告之类,在之前项目中采用的实现方式是ViewHolder持有CountDownTimer,虽然这种方式可以实现Item倒计时,但是给每个ViewHolder设计一个CountDownTimer无疑增加了CPU的开销以及内存的浪费,之后尝试思考能不能使用一个轮询来实现这种效果,一番思考之后想到了解决方案。 ...

ConstraintLayout小知识汇总

常用的小知识

本文记录ConstraintLayout使用中的一些小知识点。当前使用的ConstraintLayout版本为: 1 implementation "androidx.constraintlayout:constraintlayout:2.1.0" 基线对齐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

Jetpack Paging3

Paging3入门

Paging简介 Paging是Google推出用于更适用于Android平台的分页库, 数据源可以来自网络或者本地,利用Paging可以使应用更加高效的利用网络带宽和系统资源。 对比传统的分页实现,Google为何单独推出一个Paging用于处理分页呢? Paging的内部实现有一套非常合理的分页架构,我们按照提供架构实现自己的业务逻辑即可,至于什么时候加载、加载状态,都由Paging...

RecyclerView ConcatAdapter

ConcatAdapter

ConcatAdapter可以依次呈现多个RecyclerView#Adapter的内容,它是由MergeAdapter改名而来。 MergeAdapter是在RecyclerView:1.2.0-alpha02版本中添加进来的,然后在RecyclerView:1.2.0-alpha04改名为ConcatAdapter。 比如常见的给RecyclerView添加Header或者F...

Android存储空间整理

Scope Storage

Android文件系统类似于其他平台上基于磁盘的文件系统。该系统提供了以下几种保存应用数据的选项: 应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。 共享存储:该目录下的文件,包括媒体、文档和其他文件可以与其他应用共享。 偏好设置:以键值对形式存储私有原始数据。 ...

CameraX小记

Jetpack CameraX

本文记录如何使用CameraX预览、拍照、解析照片、录制视频。 CameraX特性: CameraX最低兼容到Android5.0(API 21) CameraX使用的是Camera2的API,但使用的是更为简单且基于用例的方法,该方法具有生命周期感知能力。 支持CameraX Extensions插件,用于访问手机制造商已为特定手机实现的效果(焦外成像、HDR 及其他功能...

Coroutines Flow

Coroutines Flow小记

Flow Flow的出现是为了解决挂起函数只能返回一个返回值的问题,Flow支持返回一个”流”,可以理解为可以返回多个异步处理的结果。 创建一个Flow 创建flow的方式在Builders.kt中,主要有以下: 最基本的创建方式: 1 2 3 4 5 val mFlow = flow { emit(1) emit(2) emit(3)...

记一次Google Play上架遇到的问题

Google Play上架问题

前言 开发的直播项目VoLive在上架Google Play的时候被拒了2次,记录这2个问题。 SSL Error Handler 第一次上架的时候被拒绝,然后邮件告知: 问题:WebView遇到SSL错误应该告知用户,让用户处理是否继续或退出。 分析:问题代码出现在WebView重写WebViewClient#onReceivedSslError(view: WebView?...

Android MotionLayout

MotionLayout小记

前言 最早19年的时候在Youtube上看到Google的视频说过MotionLayout,当时看到第一感觉就是很酷,能用xml来描述两个布局切换的过程,还能定义关键帧,最近有时间来好好研究一下。 什么是MotionLayout Motion代表动作,说明MotionLayout处理布局之间的“运动”,这样说不够贴切,准确来说应该是处理布局之间的转换(比如从布局A切换到布局B的一个转换...