
自定义控件
文章平均质量分 80
锐湃
这个作者很懒,什么都没留下…
展开
-
RecyclerView跨行跨列的LayoutManager:Spannedgridlayoutmanager
RecyclerView可以使用GridLayoutManager实现跨行,但是不能跨列;瀑布流布局可以跨列但是又不能跨行。原生自带的各个LayoutManager中并没有可以又跨行又能跨列的。网上搜寻了一番,找到了一个亲测可行好用的三方库:spannedgridlayoutmanager。转载 2024-11-20 15:52:53 · 137 阅读 · 0 评论 -
Android设计模式实战 ,实现一个弹窗引擎封装dialog
最近项目使用的一个第三方库很多线上 Bug 所以考虑换一个第三方库了,结果去除依赖之后导致基本每个页面都要修改,项目全部爆红,人都麻了,悔不该当初图方便没有使用引擎类啊。第三方库提供基本的各种功能,引擎类封装一层给自己的项目预定特定的效果,上层应用只需要调用引擎即可实现效果,不需要关心底层的实现,不需要引用第三方的依赖和类库。当我们第三方库升级或替换的时候,只需要修改引擎类即可。下面我以弹窗库的封装为例,封装一个弹窗引擎库,下来就一起来看看吧。转载 2024-09-24 10:14:55 · 330 阅读 · 0 评论 -
以一种简单的方式来实现弹幕效果
弹幕的无限滚动:确保弹幕能够连续地滚动,而不是在到达末尾时重新开始。弹幕的多行显示:能够在屏幕上同时显示多行弹幕,并且每行弹幕独立滚动。滚动速度的控制:能够控制弹幕的滚动速度,以实现流畅的视觉效果。本文将通过一个示例项目来展示如何实现上述功能。gif图有点卡,可以自行运行一下看效果。通过本文的介绍,我们实现了一种简单的弹幕效果。使用和,不仅实现了多行弹幕的效果,还可以通过控制scrollBy方法的速度,实现弹幕的平滑滚动。这种方式非常适合在需要显示大量动态文本信息的场景中使用,例如商品评论等。转载 2024-09-20 13:46:57 · 283 阅读 · 0 评论 -
为什么View的 onDetachedFromWindow 方法不一定执行
其实 setView 是在 onResume 方法之后,内部流程是通过 PhoneWindow 获取 WindowManagerImpl 来调用 addView 方法,其内部会调用 WindowManagerGlobal.addView 方法,最后调到 ViewRootImpl 的 setView 方法。从源码中可以看到,View 的 onDetachedFromWindow 方法其内部是由 View 的 dispatchDetachedFromWindow 调用的。转载 2024-09-10 14:46:48 · 259 阅读 · 0 评论 -
5年了,ViewPager2 终于支持 overScrollMode,没错,我干的。
这个 bug 被扔进了 backlog 将近5年,现在这个坑总算被填上了,我自己很开心,开发者后面更新版本后发现这个属性能用了肯定也会很开心,可能这就是开源的乐趣所在吧。androidx 从最开始提出到现在,其实一直都是开源,并且鼓励开发者贡献的。希望各位小伙伴平时发现问题,分析问题,解决问题之后,都可以慷慨将自己的方案提交给 Google,这除了能帮到全球数以万计的开发者之外,自己也能获得一份满满的成就感,何乐而不为呢?作者:Mr_万能胶。转载 2024-08-19 16:10:45 · 272 阅读 · 0 评论 -
Drag Select Compose:实现多平台图片多选功能的利器
Drag Select Compose库使我们能够轻松实现复杂的图片多选功能,同时支持多种平台。通过该库,我们不仅可以简化开发流程,还可以为用户提供流畅的交互体验。希望通过这篇博客,您能更好地理解和应用这一强大的工具。了解更多信息,请访问DragSelectCompose文档Drag Select Compose:实现多平台图片多选功能的利器。转载 2024-07-08 10:48:20 · 102 阅读 · 0 评论 -
Android自定义ViewGroup的滚动与惯性滚动效果实现的不同组合方式
使用 GestureDetector 可以帮助我们快速实现检测手势,比如单击、双击、长按、滑动,惯性等。它是谷歌给我们的快速实现类,缺点是不方便自定义。使用 VelocityTracker 可以帮助我们计算触摸事件的速度和方向,比如滑动的速度和方向。它是用于惯性和滑动方向判断的底层类,可以方便自定义。使用 Scroller 可以在视图中实现平滑滚动效果。虽然 Scroller 自身不直接使视图滚动,它通过内部跟踪和计算滚动的位置,确保滚动操作看起来平滑连贯。转载 2024-07-03 10:15:26 · 172 阅读 · 0 评论 -
The specified child already has a parent. You must call removeView() on the child‘s parent first问题
在我们添加视图的时候(此时我添加的是ImageView),通过视图去获取其parent。然后通过判断parent中是否含有这个视图,如果有就删除掉,没有。将parent中的控件删除后就保证添加到的父容器中不会重复添加,此时就不会报错了。这种一般是出现在viewpager无限轮播的时候需要不断的添加,这时候这么写已经不能解决了。这样就在销毁的时候将view移出,下次添加的时候就不会出现已经有parent的情况。这时候就需要将destroyItem中的代码注释。这只是一种方案,如果有更好的可以评论告诉我。转载 2024-06-07 11:08:38 · 207 阅读 · 0 评论 -
自定义View:手撸一个带FAB凹槽的底部导航栏
底部导航栏相信大部分的Androider都不陌生,毕竟对于绝大多数的应用来说底部导航栏是首页的标配,也不缺各种花里胡哨不按常理出牌的底部导航栏。例如在我某天路过看到同事搞了个下面这样的:我:咦?这种中间的FAB直接凹陷下去的效果你是怎么实现的,之前还没搞过这样的还真有点新奇hhh同事:UI提供的切图呗,图片原本就是中间凹下去的,直接设成background不就行了,这有多难?我:......?如果你的FAB移动了,导航栏怎么跟着变化?同事:没得怎么变化,反正需求没有说要加动画。转载 2024-06-05 11:17:30 · 478 阅读 · 0 评论 -
ViewPager 无限循环
使用这种方式启动的时候,需要将 2 号图片,设置为第一张,当向前滑动的时候,因为前面的 1号图片 是和 4 号图片一样,那么,给人的错觉就像是无线循环的一样,当选中一号图片后,立即将当前选中的图片设置为 4 号图片,4号图片向5号图片滑动也是同理。将 ViewPager 的Count 的数量设置的尽可能的大,然后就造成了无限循环的假象。第二种,方式是,假如三个图片无限循环,那么就需要用5张图片,如下图所示。基本的需求已经实现,如果还有更多的需求,还可以根据上面的扩展。测试我们的Adapter。转载 2024-05-30 20:23:24 · 317 阅读 · 0 评论 -
RecyclerView宫格拖拽效果实现
本篇到这里就结束了,我们利用RecyclerView实现了宫格图片的拖拽效果,主要是借助ItemTouchHelper实现,从ItemTouchHelper中我们能看到很多巧妙的的设计,里面有很多值得我们学习的技巧,特别是对事件的处理、绘制顺序调整的方式,如果做吸顶,未尝不是一种方案。作者:时光少年链接:https://juejin.cn/post/7348707728921853971来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-04-16 17:02:26 · 349 阅读 · 0 评论 -
Kotlin自定义View
说说Kotlin和Java感觉差异比较大的地方。首先是变量的生命,Kotlin声明时必须赋值或者初始化,java则不用,开始有点不习惯。Kotlin不需要分号结尾,Kotlin的循环用起来简直爽YY。首先是这次自定义View的效果图,是一张饼图。如果是用java写的话也就几十行,觉得换成Kotlin的话可能会更少。主要的功能是可以任设定数据的个数,我这里是4个数据,可以任意设定每个数据的颜色。#####首先上Kotlin代码##########相同功能Java代码#####转载 2024-04-15 15:19:47 · 573 阅读 · 0 评论 -
优雅地实现 Dialog 弹窗
可能早就有人已经发现了,我们现在对话框的调用方式跟 Compose,React 很相似,也就是最近很流行的声明式 UI,为什么说它流行,比我们传统的命令式UI好用,主要的差别就在于声明式UI调用方只需要在乎视图的描述就可以,而真正视图如何渲染,如何测量,调用方不需要关心。转载 2024-04-15 14:38:30 · 803 阅读 · 0 评论 -
自定义控件之自定义属性
上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性。本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解。有关原理知识请参考Android自定义控件之基本原理(一)这篇文章。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云。转载 2024-04-15 14:22:49 · 139 阅读 · 0 评论 -
自定义控件之基本原理
在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云1. 应当遵守Android标准的规范(命名,可配置,事件处理等)。2. 在XML布局中可配置控件的属性。转载 2024-04-15 14:11:49 · 57 阅读 · 0 评论 -
Android自定义控件之自定义组合控件
前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一)、自定义属性Android自定义控件之自定义属性(二)。今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发成本,以及维护成本。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云。转载 2024-03-26 20:16:02 · 84 阅读 · 0 评论 -
自定义View学习——三种实现方式
由此学习是一个我认为比较愉快的学习方向。首先说说自定义View的种类,分为三种:转载 2024-03-26 20:10:01 · 106 阅读 · 0 评论 -
自定义View的图片绘制与交互实战,用户新功能指引控件实现
剩下的完善细节,例如可以把蒙层前景的颜色值,是否启动外部触摸,是否展示箭头等变量设置到自定义属性中。如果你们的产品还需要更加的细分的话,例如提示的图片 View 与下一步的图片 View 要分开,那么就需要你自己拆分,再定义一个对应的 NextView,与对应的图片绘制,相信各位看完此篇对你们来说不算难事了。通过本文我们其实可以更加的理解绘制坐标系,图片的绘制无非就是top left的确定,限制矩阵也无非就是上下左右的赋值,理解了这些对于其他方式的绘制,如线条,圆形,文本等都能驾轻就熟了。转载 2024-01-03 13:25:13 · 99 阅读 · 0 评论 -
12个自定义View的高级问题
了解面试者对自定义View核心概念的理解,以及其在实际开发中的应用能力。参考简答:View与ViewGroup:View是Android界面的基本构建块,而ViewGroup是一种特殊的View,用于包含和管理其他View。自定义View的必备步骤:继承View或其子类,实现构造函数、测量、布局和绘制方法。重写onDraw方法:在该方法中进行绘制操作,实现自定义的外观和交互。测试面试者对于View绘制流程的全面理解。onDraw方法:在onDraw中进行实际的绘制操作,包括绘制图形、文本等。转载 2023-12-25 16:17:33 · 127 阅读 · 0 评论 -
一个实现跳转到更多页面的黏性交互的通用组件
RecylerView 向左滑到了最右边且是向右滑动(dx小于0)时,此时 HorStickNavLayout 内容向左滚动了有一段距离,即 scrollX 是大于0的,那么让 HorStickNavLayout 中的内容向右滚动,提示文案逐渐消失,最多滚动到 scrollX 等于0,然后,无论是触摸引起的还是 fling 引起的多余滑动距离, HorStickNavLayout 不再处理,交由 RecyclerView 继续处理,这样实现了嵌套滑动的连贯性。至此,本技术方案使用到的原理及步骤介绍完毕。转载 2023-09-26 11:26:30 · 171 阅读 · 0 评论 -
使用RecyclerView实现三种阅读器翻页样式
为何直接对进行扩展而不使用?转载 2023-09-04 10:32:40 · 1174 阅读 · 0 评论 -
实战经验:打造仿微信聊天键盘,解决常见问题
仿照微信聊天键盘的方法,实现了一个包含表情等功能的键盘区域,并解决了一些常见的问题。通过实践和调查,解决了切换键盘的问题,并实现了Emoji的Unicode显示和自定义删除时向前探索字符边界完成表情删除等操作。在过程中,以为很简单的一个东西花了大量的时间调查原因,发现键盘这一块水很深,当我看到ResultReceiver时,看到了AIDL通信,所以再Android这个体系中,Binder的机制需要了然于胸的,刚好我最近在学习Binder得各种知识,不久后会发布对应的博客,关注我,哈哈。此系列属于我的一个。转载 2023-05-06 14:41:38 · 1162 阅读 · 0 评论 -
App 添加自定义表情
上一篇文章介绍了 Span 的原理。这一篇文章将介绍 Span 的应用,使用 Span 来给 App 添加自定义表情。转载 2023-03-24 16:03:24 · 185 阅读 · 0 评论 -
自定义ViewGroup嵌套与交互实战,幕布全屏滚动效果
事情是这个样子的,前几天产品丢给我一个视频,你觉得这个效果怎么样?我们的 App 也做一个这个效果吧!到底怎么做呢?相信跟着我一起复习的小伙伴们心里都有了一点雏形。自定义ViewGroup。下面跟着我一起再次巩固一次 ViewGroup 的测量与布局,加上事件的处理,就能完成对应的功能。话不多说,Let's go我们先前都是使用的成员变量来控制一些间距与逻辑的触发,这就跟业务耦合了,如果想做到通用的一个效果,肯定还是要抽取自定义属性,做到对应的配置开关,就可以适应更多的场景使用,也是开源项目的必备技能。转载 2023-03-07 10:17:28 · 309 阅读 · 0 评论 -
CoordinatorLayout协调者布局原理分析并实现吸顶效果
首先我们先从源码中能够看到,CoordinatorLayout只实现了parent接口(这里如果不清楚parent接口是干什么的,建议看看前面的文章,不然根本不清楚我讲的是什么),说明CoordinatorLayout只能作为父容器来使用。复制代码所以对于CoordinatorLayout来说,它的主要作用就是用来管理子View或者子View之间的联动交互。所以在上一篇文章中,我们介绍的NestScroll嵌套滑动机制,它其实能够实现child与parent的嵌套滑动,但是是1对1的;转载 2023-03-06 11:07:18 · 1201 阅读 · 0 评论 -
MPAndroidChart显示No data available
网络请求返回数据后设置到chart中,但是一直显示no data available。跳转到其它页面再返回显示正常。在设置数据后需要手动调用view的invalidate方法刷新chart。转载 2022-12-14 20:57:59 · 1052 阅读 · 0 评论 -
子线程 UI 操作真的不可以?
至此,我们可以得出第一个结论:一个未被attach的View的实例化及其中属性的操作,由于其顶层parent是不存在viewRootImpl对象的,无论调用什么方法,都不会触发到checkThread,因此是完全可以放在子线程中进行的。其实通过上面TextView#setText方法调用链的信息,我们已经知道,所有的成功执行的view#invalidate方法,最终都会走到ViewRootImpl中的方法,并在ViewRootImpl中检查尝试更新UI的线程。——《Android开发艺术探索》转载 2022-12-14 10:48:48 · 272 阅读 · 0 评论 -
自定义View的绘制,往往都是从圆环开始
作为一个自定义View,我们需要配置一些属性,那么必不可少的就需要一些自定义属性,比如我们的圆环View,从效果图上看的话,我们需要定义如下的元素:一个内环,一个外环,外环阴影,一个百分比的文本,一个提示文本。从而我们就需要指定一下内环的宽度、背景颜色、外环的宽度、颜色、阴影的大小、阴影的颜色、百分比文字的大小颜色、提示文本的大小颜色,由于我们还需要做动画展示圆环,所以我们还需要配置是否开启动画。总的来说一些自定义的属性定义位置如下:复制代码。转载 2022-12-13 10:33:21 · 204 阅读 · 0 评论 -
Android ImageView到底怎么设置圆角图片?背景圆角?控件圆角?图片圆角?占位图圆角?
我早几年前做项目就遇到这样的场景,设置背景之后,在上面加载圆角的图片,但是背景会漏出来,好不容易让UI切图解决之后,占位图又出问题,占位图不是圆角的就把整个布局盖住了,不符合UI的美学,哎,我要吐了。第一种思路:对背景和占位图有需求,最好是找UI切图,对应的比例的圆角背景图和圆角占位图,如果一个项目有多个不同的比例的,不同圆角的设计图,那么可以想象项目中需要导入多少图片,Apk会变大。我们顺便加上圆形图片的绘制,圆角的图片绘制,各自圆角的绘制,和对应的背景的圆角,图片背景与颜色背景设置等一系列功能。转载 2022-09-28 10:22:41 · 2964 阅读 · 0 评论 -
自定义一个随意拖拽可吸边的悬浮View
先定义一个FloatView类,继承自FrameLayout,实现构造方法。创建一个ShapeableImageView,并添加到这个FloatView中。}}}复制代码。转载 2022-08-31 10:35:22 · 1285 阅读 · 0 评论 -
控件 圆角描边 MaterialShapeDrawable 阴影
原文链接https//blog.youkuaiyun.com/Originality_special/article/details/118222330。版权声明本文为优快云博主「软件熊猫」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。Java没有kotlin调用这种多参方便,没办法指定传那个参数,如果想改变最后一个角就必须把前面的也都传值.ControlsTheRoundedKt是顶层方法就是上面的roundedCorners代码名字。...转载 2022-07-28 18:12:25 · 454 阅读 · 0 评论 -
谈谈 Android 渲染机制:如何绘制并显示一帧图像
本文将介绍 Android 的渲染机制。了解 Android 的渲染机制不论是对日常的开发,还是渲染问题排查都会有帮助。本文希望能带你了解 Android 是如何绘制并显示一帧图像的,同时会涉及 Perfetto UI 的使用,以及带来一些延伸的思考问题,感兴趣的可以在阅读的同时同步使用 Perfetto UI 进行尝试。先看一个经典的例子,如何获取一个 View 的尺寸?很简单是吗?相信入门的 Android 开发者都知道,在这个情况下,这样调用是拿不到的:所以大家都通常这样做:在 se转载 2022-07-13 10:17:39 · 2137 阅读 · 0 评论 -
TextView自动适配文本大小的几种方案
标题太难取了,其实本文主要就是讲如何控制文本大小,让其自动适配宽度,其次我们还需要精准控制Text的高度和宽度间距等属性。一般我们的布局都是分 match parent 和 wrap content 而他们的自动方式又有所不同。下面看看都有哪些方式来实现!一、Autosizing的方式(固定宽度)官方推出的TextView的Autosizing方式,在宽度固定的情况下,可以设置最大文本Size和最小文本Size和每次缩放粒度,非常方便的就能实现该功能。 autoSizeTextType:设置 Tex转载 2022-06-20 10:05:33 · 4673 阅读 · 0 评论 -
Android富文本管理的几种方式
在Android开发过程中,最常见的富文本场景一般都是变色,点击跳转,或者局部变大,而我们实现的方式通常分为两种。一种是Html的方式定义在string中,通过html标签变色,变大,通过占位符填充数据。一般常用于有国际化的需求。另一种是CharSequence的setSpan设置自定义Span。功能更强大,细读也更细,便于精准操作。一般用于没有国际化需求的地方。为什么有国际化相关的要求,是因为一般setSpan的方式都是添加或者根据索引替换对应的文本,如果国际化之后中英马等语言的顺序都变了,自然效果就不同转载 2022-06-15 09:38:13 · 804 阅读 · 0 评论 -
view可见区域getGlobalVisibleRect() 与 getLocalVisibleRect()
1. 讲解这两个方法之前, 首先我们先看下一个图片, 只是一个简单的Activity, 一个Linearlayout(背景为红色) 里面放了一个正方形(背景为蓝色)并且边距已经标出.2. 接下来我们看这两个方法获得的值(背景为蓝色 View 的矩形框)//Kotlin codevar globalVisibleRect = Rect()testVisiblty.getGlobalVisibleRect(globalVisibleRect)var localVisibleRec.转载 2022-04-28 15:37:52 · 918 阅读 · 0 评论 -
原生TabLayout使用全解析,看这篇就够了
1前言为什么会有这篇文章呢,是因为之前关于TabLayout的使用陆陆续续也写了好几篇了,感觉比较分散,且不成体系,写这篇文章的目的就是希望能把各种效果的实现一次性讲齐,所以也有了标题的「看这篇就够了」。TabLayout作为导航组件来说,使用场景非常的多,也意味着要满足各种各样的需求。在效果实现上,有同学会选择自定义View来做,定制性高,但易用性、稳定性、维护性不敢保证,使用官方组件能避免这些不确定性,一是开源,有很多大佬共建,会不停的迭代;二是经过大型app验证,比如goo转载 2022-04-28 14:37:01 · 977 阅读 · 0 评论 -
MPAndroidChart展示饼状图和它的点击事件
近段时间要再项目上加统计图(饼状图),觉得MPAndroidChart这个统计图控件很好用,但是并没有明确它的点击事件,而是点击之后放大部分图区,再次点击回归正常,而我们的要求是需要点击展示相对应的图的数据,没有我们想要的点击事件我们就找,用另一种方法来实现添加MPAndroidChart依赖 //MPAndroidChart implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'在布局设置控件 <...转载 2022-04-20 20:40:31 · 1040 阅读 · 0 评论 -
MPAndroidchart 折线图
效果图依赖s { repositories { jcenter() maven { url "https://jitpack.io" } } } //依赖dependencies{ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'} activity.xml<?xml version="1.0" encod转载 2022-04-20 20:10:25 · 713 阅读 · 0 评论 -
如何静态及动态地生成各式Drawable,全面掌握
前言在实际项目开发中,我们都会定义很多各式各样的Drawable来实现需求上所要求的UI效果,如果是稍加复杂的UI需求,我们则会通过自定义View的方式来实现。今天,我就分享一下一些常用Drawable的总结,介绍一下如何静态及动态地生成各式Drawable,以及介绍一下自定义Drawable。Drawable 是可绘制对象的一个抽象类,相对比View来说,它更加的纯粹,只用来处理绘制的相关工作而不处理与用户的交互事件,所以适合用来处理背景的绘制。在介绍自定义Drawable前,我们先来学习转载 2022-04-14 14:11:26 · 958 阅读 · 0 评论 -
子线程更新UI全解
1子线程更新 UI 异常设计理念及简单源码解析初学者可能会犯在子线程更新 UI 的错误,例如:thread{imageView.setBackgroundColor(Color.RED)}一旦运行,应用会直接崩溃并抛出异常,这也是我们 Android 开发的一条铁律:_在子线程中不能更新 UI_。那么为什么 Android 不让子线程更新 UI 呢?原因在于现在屏幕刷新率最低是 60Hz,意味着最多每 16ms 就会刷新一次屏幕,所以 UI 更新要尽可能快速...转载 2022-04-13 10:20:34 · 1044 阅读 · 0 评论