全部系列

自定义 View 与列表

Android 开发 · 共 30 篇 · 按发布时间正序排列

自定义控件、RecyclerView 生态与交互效果的手写实现

RecyclerView基本使用
Android

RecyclerView基本使用

RecyclerView基本使用1、RecyclerViewRecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。位于包 androidx.recyclerview.widget 中,需要在build.gradle中添加依赖:1.1、使用RecyclerView首先在布局文件中添加:在Activity中声明Re

2.1k
Android

Android ScrollView 顶部下拉与底部上拉回弹效果实现

Android ScrollView 顶部下拉与底部上拉回弹效果实现ScrollView 滑到顶部或底部时,默认是"硬边界"——戛然而止,没有 iOS 那种顺滑的橡皮筋回弹手感。要让 Android 的 ScrollView 也具备这种效果,需要自定义控件在触摸事件里做干预。本文实现一个 ReboundScrollView:在 dispatchTouchEvent 中判断是否到达顶部/底部,到达后

332
CoordinatorLayout及高级菜单栏AppBarLayout、CollapsingBarLayout
Android

CoordinatorLayout及高级菜单栏AppBarLayout、CollapsingBarLayout

CoordinatorLayout及高级菜单栏AppBarLayout、CollapsingBarLayout1、协调布局CoordinatorLayout安卓Material Design库中一个比较难的控件就是CoordinatorLayout协调布局。协调布局CoordinatorLayout继承自ViewGroup,类似于RelativeLayout。1.1、协调布局属性协调布局有两个重要

2.6k
开源

GuideBackgroundColorAnimation 详解:ViewPager 滑动时背景色渐变

GuideBackgroundColorAnimation 详解:ViewPager 滑动时背景色渐变很多 App 的引导页(新手引导/功能介绍)有个"高级感"效果:用户在 ViewPager 上左右滑动切换页面时,整个背景颜色会随着滑动进度平滑过渡——从蓝色渐变到橙色,再从橙色渐变到紫色,像调色盘一样丝滑。这个效果就是 GuideBackgroundColorAnimation 要做的事。虽然库

752
抽屉布局DrawerLayout
Android

抽屉布局DrawerLayout

DrawerLayout大多数APP都会提供侧边菜单,在手机屏幕的左测或者右侧从外向内滑动拉出一个菜单。就是用DrawerLayout实现的,Android官方提供的侧边菜单栏。1、布局中添加DrawerLayoutDrawerLayout作为布局的根标签。主布局LinearLayout一定要放在紧接着第一个位置。而且大小一定要设置成match_parent2、添加侧边菜单在DrawerLayou

1.8k
SwipeRefreshLayout下拉刷新
Android

SwipeRefreshLayout下拉刷新

SwipeRefreshLayout 下拉刷新是经常遇到的场景,Android官方为我们提供了一个下拉刷新控件,准确的来说是容器。官方文档说明,SwipeRefreshLayout只能有一个子View,这一点和ScrollView一样。1、布局中添加SwipeRefreshLayout 使用SwipeRefreshLayout需要在build.gradle中添加额外的依赖,因为这属于materia

1.9k 1
Android

Android ScrollView 详解:从使用到原理与嵌套冲突

Android ScrollView 详解:从使用到原理与嵌套冲突ScrollView 是 Android 里最基础的"可滚动容器",看似简单,真到实战却处处是坑:嵌套 ListView 只显示一行、和 ViewPager 抢滑动、监听不到滚动方向、滚不到底、拉到边缘有碍眼的蓝色回弹……本文把 ScrollView 的基本使用、滑动监听、滚到顶底、滑动冲突、嵌套列表、消除回弹、底层原理一次性讲透—

357
富文本SpannableString
Android

富文本SpannableString

SpannableString1、SpannableString简介和String类似,不过SpannableString的功能更加丰富强大。给原本枯燥的文本添加各种功能和色彩。比如颜色、字体、超链接、表情、点击响应等功能。源码中关于SpannableString的解释如下:2、设置风格:SetSpan()关于SpannableString源码就70余行,除了几个构造函数,还有一个重要的方法set

2.2k 1
分享

Canvas: trying to use a recycled bitmap android.graphics

Canvas: trying to use a recycled bitmap android.graphics又又遇到祖传问题,网上一搜6年前都有这个问题,看来从历史吸取经验教训是最快的成长!1、异常捕获复现很容易:写一个Bitmap,调用Bitmap的recycle()方法将其回收掉,再设置给ImageView。捕获到下面的异常:Process: com.easyicon.learnglide

4.8k
Android

自定义View属性

自定义View属性在布局中使用自定义的View时系统会自动调用自定义View的第二个构造函数View(Context context, AttributeSet attrs),生成自定义View实例:1、自定义View属性其中自定义的属性myColor、myGravity、mySize都是res/values/attrs.xml文件中定义的。1.1、<declare-styleable/>自定义属

1.8k
Android

画布Canvas绘制基础

画布Canvas绘制基础之前提到自定义View中的“神笔”Paint,现在来看看“画布”。Canvas就是自定义View中的“画布”,可以在Canvas上面绘制文本、Bitmap、路径、图形等,绘制设计炫酷的界面。1、Canvas关于Canvas更多内容详见Android Developers>Docs>Reference>Canvas。1.1、Canvas类Canvas在android.grap

2.0k
Android

画布Canvas进阶操作

画布Canvas进阶操作之前介绍了Canvas画布的基础绘制操作,现在来看看涉及到Canvas自身的还有一些高级操作:旋转、平移、放缩,保存、撤销等操作。熟悉Qt开发的就会觉得非常似曾相识,没错Qt界面开发也有类似API。1、Canvas变换对画布进行旋转、平移、放缩等操作,会对绘制产生影响。1.1、缩放①scale(float sx, float sy):将画布的x、y轴都压缩为原来的sx、sy

1.8k
ViewPager进化版:ViewPager2
Android

ViewPager进化版:ViewPager2

ViewPager进化版:ViewPager2大名鼎鼎的翻页视图ViewPager和RecyclerView一样被众多广大的应用使用,抖音上下滑动观看视频用的主控件就是ViewPager。继ViewPager翻页控件,Google又推出了它的升级版本ViewPager2。1、ViewPager2“上一任”ViewPager有一些瑕疵,于是Google就推陈出新搞出了个ViewPager 2.0。1

2.5k
Android

浅析Adapter中hasStableIds的作用

浅析Adapter中hasStableIds的作用1、ListView Adapter中的hasStableIds在使用ListView的时候需要自定义Adapter,一般是继承Adapter或者其子类比如BaseAdapter,并实现方法。其中有两个方法大家一定不陌生:其中一个是hasStableIds():在众多Adapter的子类中默认实现都是返回false:另一个方法则是getItemId

2.1k
Android

深度解析ItemDecoration:不仅仅是分割线

深度解析ItemDecoration:不仅仅是分割线在 Android 开发中,RecyclerView 是一个非常强大的列表控件,而 ItemDecoration 则是其重要的组成部分。很多开发者只知道它可以用来添加分割线,但实际上,ItemDecoration 的功能远不止于此。本文将深入解析 RecyclerView ItemDecoration 的工作原理、使用方法以及各种高级应用场景。1

584
ItemDecoration:打造精致的列表视觉效果
Android

ItemDecoration:打造精致的列表视觉效果

ItemDecoration:打造精致的列表视觉效果作为 Android 开发中最强大的列表控件,RecyclerView 的灵活性和扩展性很大程度上来自于它的装饰器体系。本文将全面解析 ItemDecoration 的工作原理、各个方法的调用机制以及实战应用技巧。1、ItemDecoration 设计哲学1.1、核心定位ItemDecoration 采用典型的装饰者模式,在不侵入原有适配器和布局

570
Android

ItemTouchHelper:轻松实现滑动删除与拖拽重排

ItemTouchHelper:轻松实现滑动删除与拖拽重排在 Android 开发中,为 RecyclerView 添加"滑动删除"和"拖拽重动"是提升用户体验的神技。以前这需要开发者手动计算坐标和处理动画,但自从有了 ItemTouchHelper,一切都变得优雅多了。本文将详细介绍如何使用 ItemTouchHelper 快速实现这些功能。1、什么是 ItemTouchHelper?ItemT

530
AsyncListDiffer 全面解析:高效更新 RecyclerView 数据的利器
Android

AsyncListDiffer 全面解析:高效更新 RecyclerView 数据的利器

AsyncListDiffer 全面解析:高效更新 RecyclerView 数据的利器1、AsyncListDiffer 是什么AsyncListDiffer 是 Android Jetpack 提供的一个工具类,专门用于处理 RecyclerView 数据集的异步差异计算。它能够在后台线程中高效地计算新旧数据集的差异,并以最优方式更新 UI,避免了手动调用 notifyDataSetChang

482
Android

Android Canvas 图层详解

Android Canvas 图层详解1、Canvas 图层概述Canvas 图层是 Android 绘图系统中的重要概念,它允许开发者在绘制过程中创建和管理多个绘图层,实现复杂的视觉效果。图层可以看作是独立的绘图表面,支持保存和恢复绘图状态,为绘制操作提供了更大的灵活性。核心概念: - 图层:独立的绘图表面,拥有自己的状态 - 画布状态:包括矩阵变换、裁剪区域、绘制属性等 - 图层栈:用于管理多

562
开源

​Android MergeAdapter 用法详解

Android MergeAdapter 用法详解1、MergeAdapter 概述MergeAdapter 是 Android Jetpack RecyclerView 库中的一个适配器类,它允许将多个不同的适配器合并为一个,从而在同一个 RecyclerView 中显示不同类型的内容。这一特性极大地简化了复杂列表的实现,特别是当列表中包含多种不同类型的数据和视图时。核心特点: - 支持合并多个

544
RecyclerView 缓存机制终极指南:从原理到实战优化
Android

RecyclerView 缓存机制终极指南:从原理到实战优化

RecyclerView 缓存机制终极指南:从原理到实战优化1、理解RecyclerView缓存的核心价值RecyclerView之所以能成为Android开发中最强大的列表控件,关键在于它高效的四级缓存体系: 即时响应:通过复用ViewHolder减少对象创建开销 内存优化:分层缓存控制内存占用峰值 平滑滚动:预加载机制保障60fps流畅体验 灵活扩展:支持开发者自定义缓存策略2、深入四级缓存工

296
开源

BRVAH(BaseRecyclerViewAdapterHelper)使用详解

BRVAH(BaseRecyclerViewAdapterHelper)使用详解BRVAH(BaseRecyclerViewAdapterHelper)是一个强大而灵活的 RecyclerView Adapter 框架,托管在 https://github.com/CymChad/BaseRecyclerViewAdapterHelper,截至目前已获得 24.6k Star、5.2k Fork,

466
开源

智能刷新控件 SmartRefreshLayout:下拉刷新与上拉加载实战

智能刷新控件 SmartRefreshLayout:下拉刷新与上拉加载实战下拉刷新 + 上拉加载是几乎所有列表页的标配。但 Android 官方只给了 SwipeRefreshLayout——功能简陋、不支持上拉加载、Header 无法定制。而 SmartRefreshLayout 是国内最流行、最成熟的刷新框架:强大稳定,集成了各种炫酷、多样、实用、美观的 Header 和 Footer,支持所

497
开源

Android 开发都要会的侧滑删除:AndroidSwipeLayout 实战

Android 开发都要会的侧滑删除:AndroidSwipeLayout 实战侧滑删除是 Android 列表交互的经典模式——微信、QQ、系统短信、邮件 App 都在用:手指左滑列表项,露出"删除/置顶"按钮。但手写一个健壮的侧滑并不简单,要处理多 item 互斥(一次只开一个)、嵌套水平滑动冲突、展开收起动画、RecyclerView 复用状态等一堆细节。而 daimajia 的 Andro

373
ToggleButton 详解:手搓自定义 View
开源

ToggleButton 详解:手搓自定义 View

ToggleButton 详解:手搓自定义 View每个 Android 开发者,在成长路上都应该手搓一次 ToggleButton——那个看起来简单的"iOS 风格开关",其实浓缩了自定义 View 的全部核心:测量、绘制、触摸事件、属性动画、自定义属性。zcweng 的 ToggleButton(及同作者的 SwitchButton)是 GitHub 上最经典的开源实现之一,既是拿来即用的 U

360
​CalendarView:纯 Canvas 绘制的高性能可定制日历库
开源

​CalendarView:纯 Canvas 绘制的高性能可定制日历库

CalendarView:纯 Canvas 绘制的高性能可定制日历库日历是很多 App 的刚需——签到、预约、酒店预订、账单、打卡。但 Android 上做日历有两个老大难:性能差(传统基于 RecyclerView/GridView 的日历,一个月视图就要几百个 View,滑动卡顿)和难定制(UI 千篇一律,改源码成本高)。huanghaibin-dev 的 CalendarView 用一个反直

302
Mermaid 详解:用文本画图的 JavaScript 图表库
开源

Mermaid 详解:用文本画图的 JavaScript 图表库

Mermaid 详解:用文本画图的 JavaScript 图表库画一张流程图,传统方式是拖拽 Visio 或 draw.io 的方框与连线,改一次布局重来一次。而 mermaid-js/mermaid(Mermaid)把画图变成了写代码:用几行类 Markdown 的文本描述节点与关系,渲染引擎自动生成流程图、时序图、甘特图等十几种图形。约 75k Star,是 GitHub 上最流行的图表库,且

363
Android

BigImageViewPager 详解:支持超大图、长图与视频的 Android 图片预览库

BigImageViewPager 详解:支持超大图、长图与视频的 Android 图片预览库在社交、电商、相册类 App 里,点开一张图进入可双指缩放的全屏预览几乎是标配。自己从零实现,要处理长图 OOM、手势缩放、原图下载进度、与图片加载框架衔接等一连串细节。BigImageViewPager(作者 SherlockGougou)把这些打包成一个开箱即用的 Android 预览库,支持超大图、

150
WilliamChart:轻量美观的 Android 图表库实战
精选开源

WilliamChart:轻量美观的 Android 图表库实战

WilliamChart:轻量美观的 Android 图表库实战数据可视化是运动、健康、金融、统计类 App 的刚需。MPAndroidChart 功能最全但偏重复杂,WilliamChart 走的则是"轻量 + 美观 + Kotlin 原生"路线——v3 用 Kotlin 完全重写,API 极简,一行 chart.animate(dataSet) 就能把数据画成带动画的折线/柱状/环形图,开箱即

141