
Android View相关
文章平均质量分 86
Android View相关
_小马快跑_
代码说,欢迎点赞、关注。感谢!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android Matrix 最全方法详解与进阶
通过前面的代码和示例,我们已经了解了Matrix大部分方法是如何使用的,这些基本的原理和方法通过组合可能会创造出神奇的东西,网上有很多教程讲Bitmap利用Matrix变换来制作镜像倒影等,这都属于Matrix的基本应用,我就不在赘述了,下面我简要介绍几种然并卵的小技巧,更多的大家可以开启自己的脑洞来发挥。不会受到位移的影响,由于向量的平移前后是相等的,这符合向量的定律,所以这个方法不会对translate相关的方法产生反应,如果只是调用了translate相关的方法,那么得到的值和原本的一致。转载 2025-07-04 02:13:24 · 257 阅读 · 0 评论 -
来抠个图吧~——更优雅的Android UI界面控件高亮的实现
虽然我们能自己适配View的背景,可能不能包含所有Drawable的,比如RippleDrawable,而且实际业务场景肯定很复杂,也许产品需要特别的高亮形状?一个好的代码肯定要有拓展的能力,我们能否将图形的方法自定义?/*** 画你想要的任何形状*//*** 目标View 用于定位透明区域/*** 可自定义区域大小/*** 指定的形状if (null!转载 2025-07-04 00:42:27 · 29 阅读 · 0 评论 -
Android | Configuration详解及其新旧更新方式对比
Configuration主要用于描述当前设备的各种配置信息,比如屏幕尺寸、方向、字体缩放、语言、UI模式等。系统会在这些配置发生变化时(比如旋转屏幕、切换语言、调整字体大小等)自动通知应用,从而触发 Activity 的 onConfigurationChanged() 或重新创建 Activity。Configuration通常作用如下:a、描述设备当前状态,如语言、屏幕方向、密度、输入设备等;b、辅助资源选择,决定加载哪些资源(如 layout-sw600dp、values-zh-rCN 等)原创 2025-04-08 13:05:41 · 1038 阅读 · 0 评论 -
Android | MutableContextWrapper详解
MutableContextWrapper 是 ContextWrapper 的一个子类,允许在运行时更改内部 Context,主要用于在 View 或 WebView 需要在不同 Context 之间切换的场景。• MutableContextWrapper 继承自 ContextWrapper,但提供了 setBaseContext(Context base) 方法,允许动态切换 Context。• 在 Activity 切换时,更新 Context,确保 View 绑定到新 Activity。原创 2025-04-03 01:15:45 · 670 阅读 · 0 评论 -
Android | ViewStub原理解析
ViewStub 是 Android 提供的一个轻量级 View,它本身不会绘制任何内容,占用 0x0 的大小,主要用于 延迟加载布局。当调用inflate()方法或使其可见时,它会 替换 自身并加载指定的 layout 资源,从而优化 View 的初始化时间和内存占用。通过ViewStub可以避免初始化不必要的 View,提高加载性能,减少复杂 UI 造成的绘制开销。,本文来看下ViewStub的源码,了解下它的工作流程。原创 2025-03-03 16:11:12 · 344 阅读 · 0 评论 -
重温基础:LayoutInflater.inflate(resource, root, attachToRoot)参数解析
要加载的 XML 布局资源 ID,如 R.layout.item_view。:指定 View 的 父容器,主要用于 LayoutParams 设定。可以是 null。:是否将 View 直接添加到 root:• true:直接添加到 root,返回 root。• false:不添加到 root,但 root 可能会影响 LayoutParams。• root == null:不会影响 LayoutParams,返回独立的 View。root结果非nulltrue。原创 2025-03-03 00:16:21 · 625 阅读 · 0 评论 -
玩转 ImageView.ScaleType:图片的缩放与裁剪技巧
ImageView.ScaleType 是一个枚举类,它定义了不同的缩放方式,用于控制图片如何在 ImageView 中展示。常用的 ScaleType 类型及其效果ScaleType缩放方式是否填满ImageView是否裁剪对齐方式MATRIX自定义否否由 Matrix 决定FIT_XY拉伸填充是(变形)否填充整个 ImageViewFIT_START等比缩放否否顶部/左侧对齐FIT_CENTER等比缩放否否居中对齐FIT_END等比缩放否否。原创 2025-02-22 22:08:19 · 741 阅读 · 0 评论 -
Android 布局优化:利用 ViewStub 和 Merge 提升性能
ViewStub 适用于惰性加载,能够延迟加载视图,减少初始界面的渲染时间,提升应用启动速度。Merge 适用于减少布局层级,特别是当使用<include>标签重复使用布局时,它能去掉额外的根视图,提升 UI 渲染效率。根据项目需求选择合适的优化策略,能够显著提升 Android 应用的性能,提供更流畅的用户体验。原创 2025-02-17 02:25:37 · 538 阅读 · 0 评论 -
Android | 通过 layer-list 设置默认加载错误图片
在 Android 开发中,layer-list 是一个非常实用的 Drawable 资源,它可以将多个层叠的图形、颜色、图片等组合在一起,实现复杂的视觉效果。在需要为加载失败的图片提供占位图时,使用 layer-list 可以保证背景填充、图标居中且不会变形。原创 2025-02-16 00:44:14 · 643 阅读 · 0 评论 -
ConstraintLayout之layout_constraintDimensionRatio属性详解
layout_constraintDimensionRatio 是 ConstraintLayout 提供的一个强大功能,它可以让 View 按照固定的宽高比例自适应尺寸。使用这个属性,可以在 ConstraintLayout 中根据已知的宽度或高度,自动计算另一个维度,确保 View 保持特定的宽高比。场景示例说明固定比例的图片适用于 ImageView,避免图片变形正方形按钮宽高相等,适用于按钮或 Logo动态布局H, 2:1根据屏幕宽度调整 View 大小视频播放器16:9。原创 2025-02-01 22:29:08 · 821 阅读 · 0 评论 -
Android | 利用ItemDecoration绘制RecyclerView分割线
RecyclerView.ItemDecoration 是 Android 提供的一种扩展机制,用于为 RecyclerView 的每个子项(Item)添加装饰(Decoration)。它通常用于绘制分割线、边距、背景等,目的是增强 RecyclerView 的显示效果。RecyclerView.ItemDecoration 是一个抽象类,通过重写其方法,可以实现对 RecyclerView 中的每个子项进行额外的绘制或者布局调整。通常用来绘制分割线、设置间距、添加背景等。原创 2025-01-11 22:55:11 · 1094 阅读 · 0 评论 -
Android Xfermode应用:实现炫酷刮刮卡效果
上述代码通过 PorterDuffXfermode 实现了刮刮卡的效果。刮刮卡的效果是通过在 View 上绘制一层覆盖图像(类似遮罩层),然后通过手势擦除这层图像以显示底下的内容。PorterDuffXfermode 是 Android 提供的图像混合模式,它定义了两张图像(源图像 src 和目标图像 dst)在绘制时如何混合。通过不同的模式,可以实现各种图像合成的效果。saveLayer 创建了一个独立的画布图层,用于处理复杂的混合模式绘制。混合模式会影响图层内的绘制结果,而不会影响其他部分的画布。原创 2025-01-07 01:00:00 · 127 阅读 · 0 评论 -
Android 图像合成:玩转 PorterDuff.Mode 的 18 种混合模式
由于 Porter 和 Duff 的工作仅仅关注源和目标的 alpha 通道的影响,因此原始论文中描述的 12 个操作符在这里被称为 alpha 合成模式。PorterDuff.Mode 是 Android 提供的一组用于图像混合的模式枚举类,定义了两张图像(源图像 Source 和目标图像 Destination)的像素如何进行合成的规则。其实是SRC、DST所设置的Rect范围不一样导致的。为方便起见,此类还提供了几种混合模式,这些模式同样定义了合成源和目标的结果,但不受 Alpha 通道的限制。原创 2025-01-07 00:18:04 · 1032 阅读 · 0 评论 -
MaterialShapeDrawable vs CardView:两种方式实现阴影效果对比
MaterialShapeDrawable 提供了许多灵活的配置选项,可以方便地根据需求设置视图的形状、圆角、阴影、颜色等。它是 Material Design 的核心组件之一,可以通过 ShapeAppearanceModel 来定义外观,而 elevation、shadow 等属性可以带来更丰富的视觉效果。:该方法用于设置 MaterialShapeDrawable 的 ShapeAppearanceModel,可以通过该模型来设置形状、圆角、边框等。可以看到阴影的颜色和大小都可以设置,还是挺方便的。原创 2024-12-24 18:37:34 · 701 阅读 · 0 评论 -
Android | 多种方式实现图片圆角矩形和圆形效果(续)
接上一篇,,除了上一篇中的方式,还可以通过下面的几种方式来实现对应效果。原创 2024-12-20 18:01:27 · 765 阅读 · 0 评论 -
玩转ShapeableImageView:实现灵活的自定义形状与边框效果
在 ShapeAppearanceModel.Builder 中,提供了一组用于定义形状外观(例如角和边处理)的方法。原创 2024-12-19 18:50:22 · 1068 阅读 · 0 评论 -
Android MotionLayout 示例:打造动态交互菜单示例
上述代码基于 MotionLayout 定义了多个动画场景,利用 ConstraintSet 和 Transition 构建了一个复杂的 UI 交互动画。通过点击和滑动操作,控制按钮的显示、隐藏、圆形排列和旋转效果。按钮展开和收回:点击 imageButton,一组按钮(button1 到 button6)从不可见状态展开到围绕中心按钮(imageButton)的圆形排列位置;再次点击 button 等任意按钮,这些按钮会回到中心并隐藏。原创 2024-11-20 21:11:23 · 617 阅读 · 0 评论 -
Android MotionLayout动画之KeyFrameSet关键帧详解(二)
它允许通过百分比指定位置、大小、角度等属性,以便在特定的动画帧上对元素进行更精细的控制。原创 2024-11-20 17:59:46 · 736 阅读 · 0 评论 -
ConstraintLayout 中的ImageFilterView探索:处理图片圆角、亮度、饱和度、图片重叠等
ImageFilterView 是 ConstraintLayout 提供的一个功能丰富的 ImageView 扩展类,用于轻松实现对图片的滤镜效果,包括模糊、饱和度和色调调整等。其主要用于动态地调整图片的视觉效果,例如在UI中加入背景模糊、动态色调过渡效果、图片平移、缩放、旋转等。上述这些方法让 ImageFilterView 能实现复杂的图像处理效果,非常适合制作自定义图片展示和特效。原创 2024-11-06 15:24:55 · 445 阅读 · 0 评论 -
Android | Bitmap基础知识点整理
Bitmap是一种图像表示,用于存储图像数据的像素矩阵。它使用一个矩阵保存图像的像素信息。每个像素都有颜色信息,通常以 RGB(红色、绿色、蓝色)三通道表示。ARGB_8888:表示每个像素包含 32 位(8 位 Alpha,8 位 Red,8 位 Green,8 位 Blue),是最常用的配置,图像质量高。RGB_565:每个像素包含 16 位(5 位 Red,6 位 Green,5 位 Blue),图像质量稍低,但占用的内存较少。ALPHA_8:每个像素只包含 8 位透明度,常用于遮罩。原创 2024-10-23 20:19:20 · 1166 阅读 · 0 评论 -
Android | 多种方式实现图片圆角矩形和圆形效果
以上介绍了几种常见的在 Android 中实现图片圆角矩形和圆形效果的方法,每种方式都有其使用场景和特点。自定义 ImageView 并重写 onDraw() 方法,通过 Canvas.clipPath() 实现图片的圆角矩形和圆形效果。Glide 是一个强大的图片加载库,通过它的 RequestOptions 可以轻松实现图片的圆角处理。BitmapShader 是 Android 中的一种着色器,通过它可以实现自定义的圆角和圆形图片。本文将介绍几种常见的实现方式,并提供对应的代码示例。原创 2024-08-18 00:21:40 · 2901 阅读 · 0 评论 -
Android | 了解Drawable绘制资源基础(一)
Drawable是一个抽象类,不能直接实例化。Drawable可以被用来绘制各种形状、图像、颜色块,甚至动画。Drawable通常用于显示在ImageViewButtonTextView等控件中,用作背景、状态指示器等。当系统提供的 Drawable 子类无法满足需求时,可以通过继承 Drawable 类来自定义绘制行为。通过自定义 Drawable,你可以完全控制如何绘制内容,例如绘制特殊的形状、图案或实现复杂的图形效果。自定义Drawable的应用场景自定义按钮背景:通过自定义Drawable。原创 2024-08-17 23:55:37 · 920 阅读 · 0 评论 -
超能力文本:两个示例学会自定义Span
前面的文章介绍了一些常见Span的使用场景及其示例,本文继续来看下自定义Span已经有很多种类的Span了,为什么还要自定义?自定义Span自定义Span可以根据具体需求实现更多样化的文本样式、交互效果和文本布局。当内置的Span类无法满足需求时,或者希望实现更定制化的效果时,可以考虑自定义Span。既然要自定义Span,就要考虑父类用哪个合适。在字符级别影响文本 ->在段落级别影响文本 ->影响文本外观->影响文本测量尺寸->大部分场景下,我们不用继承到这么深的父类,选择合适的已有Span。原创 2023-08-02 16:50:14 · 546 阅读 · 0 评论 -
超能力文本:TextView.setText(CharSequence text, BufferType type)中的秘密
本文已同步发表于我的微信公众号,搜索代码说即可关注,欢迎与我沟通交流。原创 2023-08-01 23:26:33 · 324 阅读 · 0 评论 -
超能力文本:探索Span机制的多彩世界(二)
它可以将绘制的图形进行模糊处理,以达到一些特定的视觉效果。这里不仅想改变大小,还想改变样式(文本颜色、下划线),所以直接通过简单的自定义。,目的是不管图片的大小,图片都能够正常的和文字进行居中展示;— b、SOLID:只绘制模糊的区域,其他区域为透明。时,如果图片的高度大于文字本身,那么居中展示就会失效。类似,在文本的行首添加一个带有指定边距的Bitmap。改变的是整个段落的行高,即使它只覆盖段落的一部分。改变段落的行高,可用于调整行与行之间的间距。绝对大小样式,以指定的像素大小设置文本的大小;原创 2023-08-01 23:24:40 · 555 阅读 · 0 评论 -
高效复用:RecyclerView内部嵌套横向列表时的优化技巧
直接创建多个固定的子View,但这种方式不够灵活,且在动态创建子View时则无能为力了;通过ViewGroup方式动态的创建各个子View,这种方式本身不能缓存子View,所以每次上下滑动时都会重新创建子View,虽然能实现我们想要的效果,但是性能并不是最优的;通过RecyclerView创建内部的列表,且通过DiffUtil进行数据对比,数据变化时更新,否则什么都不做。这种方式会在第一次创建各个子View,后面每次上下滑动时由于数据没有变化,所以会什么都不做,但是数据展示依然是正确的。原创 2023-07-26 00:46:51 · 444 阅读 · 0 评论 -
Android自定义View系列:多点触控原理
触摸事件是按序列来分组的,每一组事件必然以 MotionEvent.ACTION_DOWN 开头,以 MotionEvent.ACTION_UP 或 MotionEvent.ACTION_CANCEL 结束MotionEvent.ACTION_POINTER_DOWN 和 MotionEvent.ACTION_POINTER_UP 和 MotionEvent.ACTION_MOVE 一样,只是事件序列中的组成部分,并不会单独分出新的事件序列。转载 2023-06-29 20:41:04 · 342 阅读 · 0 评论 -
超能力文本:探索Span机制的多彩世界(一)
Span是功能强大的标记对象,可用于在字符或段落级别设置文本样式。通过将Span附加到文本对象,可以以各种方式更改文本,如修改颜色、使文本可单击、缩放文本大小以及以自定义方式绘制文本等。Span还可以更改TextPaint属性,在Canvas上绘制,甚至更改文本布局等。自定义Span可以实现更多样化的文本样式和交互效果。以下是一些常见的场景,可能需要自定义Span定制文本样式:Android 提供了一些内置的Span类,如和StyleSpan,但有时可能需要更多样化的文本样式,例如自定义字体、阴影效果等。原创 2023-06-28 20:29:53 · 522 阅读 · 0 评论 -
Android性能优化系列:VSync、Choreographer 和 Render Thread
使用 60fps 帧率除了该帧率足够”欺骗“人类大脑感受到流畅的体验外,还有就是刷新频率即和硬件有关,现在大部分手机屏幕的刷新频率都维持在 60Hz,移动设备一般使用 60Hz,是因为移动设备对于功耗的要求更高,提高手机屏幕的刷新频率功耗会随着频率的增大而线性增大,同时更高的刷新频率也意味着更短的TFT数据写入时间,对于屏幕设计来说难度更大。针对图片的非连续性,人眼的辨识力还是非常高的,例如,如果以 60fps 的速度运动,然后时不时突然降至 20fps,人眼就会察觉到这里面的不流畅性。转载 2022-12-19 18:02:52 · 1461 阅读 · 0 评论 -
Android通过WindowInsetsController设置系统栏颜色、Behavior、显示隐藏等
隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会再次显示且会在一段时间后再次自动隐藏。隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会再次显示且。隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会。:默认设置,当系统栏通过。设置的有两个值,一个是。方法获取,还可以通过。原创 2022-12-19 15:08:04 · 4030 阅读 · 0 评论 -
Android 全面屏体验
Android 应用中经常会有一些要求全屏显隐状态栏导航栏的需求。通过全屏沉浸式的处理可以让应用达到更好的显示效果。在 Android 4.1 之前,只能隐藏状态栏, 在 Android4.1之后,Android 提供了一套控制 SystemUI的方式。Android P 增加了异形屏处理,应用需要对异形屏进行适配。Android Q 增加了全面屏手势导航,应用还需要对全面屏手势导航进行适配。 在 Android R 开始,Android 增加了 WindowInsetsController 来控制 Win转载 2022-12-06 18:12:29 · 1435 阅读 · 0 评论 -
Android 深入理解View.post()获取宽高、Window加载View原理
继承自接口,提供了添加、删除、更新View的API,可以看作是WMS在客户端的代理类。实现了ViewParent接口,其是整个View树的根部,View的测量、布局、绘制以及输入事件的处理都由触发;另外,它还是的实际工作者,负责与WMS交互通信以及处理WMS传过来的事件(窗口尺寸改变等)。的生命从setView()开始,到die()结束,ViewRootImpl起到了承上启下的作用。原创 2022-11-21 01:58:16 · 2301 阅读 · 0 评论 -
Android仿淘宝、京东Banner滑动查看图文详情
本文基于ViewPager2实现的Banner效果,进而实现了仿淘宝、京东Banner滑动至最后一页时继续滑动来查看图文详情的效果。原创 2022-10-01 13:07:43 · 2371 阅读 · 0 评论 -
Android深入理解文字绘制:FontMetrics字体测量及其TextPaint介绍
`TextPaint`是`Paint`的子类,用它可以很方便的进行文字的绘制,一般情况下遇到绘制文字的需求时,我们一般用`TextPaint`所提供的方法。开始学习如何绘制文字之前,我们必须要先了解下`android`中文字是怎么绘制到屏幕上的,文字的格式又是怎么样的。...转载 2022-07-04 15:43:41 · 3185 阅读 · 0 评论 -
RecyclerView、View的onAttachedToWindow和onDetachedFromWindow调用时机
onAttachedToWindow和onDetachedFromWindow在RecyclerView中调用时机转载 2022-06-09 18:38:59 · 2267 阅读 · 0 评论 -
Android去掉ScrollerView、RecyclerView、ViewPager2等可滑动控件滑动到边缘的光晕效果
下面以RecycleView为例,其他可滑动控件也是一样的在XML中设置:<android.support.v7.widget.RecyclerView android:id="@+id/rv_recycle_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" android:overScroll原创 2022-02-18 14:42:54 · 502 阅读 · 0 评论 -
Android 深入理解ViewPager2原理及其实践(上篇)
ViewPager2介绍原创 2022-01-29 16:51:02 · 9801 阅读 · 0 评论 -
Android嵌套滑动分析与实践
文章目录【一】传统事件分发1.1 传统事件分发流程1.2 传统事件滑动冲突1.2.1外部拦截法1.2.2内部拦截法1.3 传统嵌套滑动冲突1.3.1 ScrollView+ ListView嵌套冲突1.3.2 ScrollView+ ViewPager嵌套问题【二】 传统事件分发 VS NestedScrolling【三】NestedScrolling嵌套滑动2.1 NestedScrollingChild2.2 NestedScrollingParent2.3 两者之间的关系2.4 二个NestedScr原创 2021-02-19 00:36:20 · 2297 阅读 · 6 评论 -
Android使用RecycleView实现魅族手机通讯录界面
本文主要是通过模仿魅族通讯录,学习一下RecycleView的基本用法,水平有限,如有不当之处,欢迎批评指正,不胜感激!先看通过RecycleView实现的一个效果图: 完整代码见github:仿魅族通讯录Recycleview继承关系: RecycleView的三个主要参与者: 1、LayoutManager 2、ItemAnimator 3、ItemDecoration 本文主要原创 2017-05-31 10:54:29 · 4969 阅读 · 1 评论 -
Android 深入理解ViewPager2原理及其实践(下篇)
文章目录一 效果图1.1 源码地址1.2 API介绍二 核心实现思路2.1 无限轮播2.2 轮播动画过渡2.3 处理嵌套滑动冲突2.4 配合DiffUtil增量更新2.5 自定义Item样式本篇文章主要介绍基于ViewPager2(以下简称VP2)实现的一个Banner轮播库。一 效果图功能示例基本使用仿淘宝搜索栏上下轮播1.1 源码地址上述示例效果源码参见:lib_viewpager21.2 API介绍二 核心实现思路2.1 无限轮播为了实现无限轮播,首原创 2022-02-01 00:41:11 · 4112 阅读 · 0 评论