
Android View相关
文章平均质量分 83
Android View相关
_小马快跑_
代码说,欢迎点赞、关注。感谢!
展开
-
Android MotionLayout 示例:打造动态交互菜单示例
上述代码基于 MotionLayout 定义了多个动画场景,利用 ConstraintSet 和 Transition 构建了一个复杂的 UI 交互动画。通过点击和滑动操作,控制按钮的显示、隐藏、圆形排列和旋转效果。按钮展开和收回:点击 imageButton,一组按钮(button1 到 button6)从不可见状态展开到围绕中心按钮(imageButton)的圆形排列位置;再次点击 button 等任意按钮,这些按钮会回到中心并隐藏。原创 2024-11-20 21:11:23 · 573 阅读 · 0 评论 -
Android MotionLayout动画之KeyFrameSet关键帧详解(二)
它允许通过百分比指定位置、大小、角度等属性,以便在特定的动画帧上对元素进行更精细的控制。原创 2024-11-20 17:59:46 · 628 阅读 · 0 评论 -
ConstraintLayout 中的ImageFilterView探索:处理图片圆角、亮度、饱和度、图片重叠等
ImageFilterView 是 ConstraintLayout 提供的一个功能丰富的 ImageView 扩展类,用于轻松实现对图片的滤镜效果,包括模糊、饱和度和色调调整等。其主要用于动态地调整图片的视觉效果,例如在UI中加入背景模糊、动态色调过渡效果、图片平移、缩放、旋转等。上述这些方法让 ImageFilterView 能实现复杂的图像处理效果,非常适合制作自定义图片展示和特效。原创 2024-11-06 15:24:55 · 340 阅读 · 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 · 1063 阅读 · 0 评论 -
Android | 多种方式实现图片圆角矩形和圆形效果
以上介绍了几种常见的在 Android 中实现图片圆角矩形和圆形效果的方法,每种方式都有其使用场景和特点。自定义 ImageView 并重写 onDraw() 方法,通过 Canvas.clipPath() 实现图片的圆角矩形和圆形效果。Glide 是一个强大的图片加载库,通过它的 RequestOptions 可以轻松实现图片的圆角处理。BitmapShader 是 Android 中的一种着色器,通过它可以实现自定义的圆角和圆形图片。本文将介绍几种常见的实现方式,并提供对应的代码示例。原创 2024-08-18 00:21:40 · 2416 阅读 · 0 评论 -
Android | 了解Drawable绘制资源基础(一)
Drawable是一个抽象类,不能直接实例化。Drawable可以被用来绘制各种形状、图像、颜色块,甚至动画。Drawable通常用于显示在ImageViewButtonTextView等控件中,用作背景、状态指示器等。当系统提供的 Drawable 子类无法满足需求时,可以通过继承 Drawable 类来自定义绘制行为。通过自定义 Drawable,你可以完全控制如何绘制内容,例如绘制特殊的形状、图案或实现复杂的图形效果。自定义Drawable的应用场景自定义按钮背景:通过自定义Drawable。原创 2024-08-17 23:55:37 · 846 阅读 · 0 评论 -
超能力文本:两个示例学会自定义Span
前面的文章介绍了一些常见Span的使用场景及其示例,本文继续来看下自定义Span已经有很多种类的Span了,为什么还要自定义?自定义Span自定义Span可以根据具体需求实现更多样化的文本样式、交互效果和文本布局。当内置的Span类无法满足需求时,或者希望实现更定制化的效果时,可以考虑自定义Span。既然要自定义Span,就要考虑父类用哪个合适。在字符级别影响文本 ->在段落级别影响文本 ->影响文本外观->影响文本测量尺寸->大部分场景下,我们不用继承到这么深的父类,选择合适的已有Span。原创 2023-08-02 16:50:14 · 494 阅读 · 0 评论 -
超能力文本:TextView.setText(CharSequence text, BufferType type)中的秘密
本文已同步发表于我的微信公众号,搜索代码说即可关注,欢迎与我沟通交流。原创 2023-08-01 23:26:33 · 279 阅读 · 0 评论 -
超能力文本:探索Span机制的多彩世界(二)
它可以将绘制的图形进行模糊处理,以达到一些特定的视觉效果。这里不仅想改变大小,还想改变样式(文本颜色、下划线),所以直接通过简单的自定义。,目的是不管图片的大小,图片都能够正常的和文字进行居中展示;— b、SOLID:只绘制模糊的区域,其他区域为透明。时,如果图片的高度大于文字本身,那么居中展示就会失效。类似,在文本的行首添加一个带有指定边距的Bitmap。改变的是整个段落的行高,即使它只覆盖段落的一部分。改变段落的行高,可用于调整行与行之间的间距。绝对大小样式,以指定的像素大小设置文本的大小;原创 2023-08-01 23:24:40 · 491 阅读 · 0 评论 -
高效复用:RecyclerView内部嵌套横向列表时的优化技巧
直接创建多个固定的子View,但这种方式不够灵活,且在动态创建子View时则无能为力了;通过ViewGroup方式动态的创建各个子View,这种方式本身不能缓存子View,所以每次上下滑动时都会重新创建子View,虽然能实现我们想要的效果,但是性能并不是最优的;通过RecyclerView创建内部的列表,且通过DiffUtil进行数据对比,数据变化时更新,否则什么都不做。这种方式会在第一次创建各个子View,后面每次上下滑动时由于数据没有变化,所以会什么都不做,但是数据展示依然是正确的。原创 2023-07-26 00:46:51 · 377 阅读 · 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 · 312 阅读 · 0 评论 -
超能力文本:探索Span机制的多彩世界(一)
Span是功能强大的标记对象,可用于在字符或段落级别设置文本样式。通过将Span附加到文本对象,可以以各种方式更改文本,如修改颜色、使文本可单击、缩放文本大小以及以自定义方式绘制文本等。Span还可以更改TextPaint属性,在Canvas上绘制,甚至更改文本布局等。自定义Span可以实现更多样化的文本样式和交互效果。以下是一些常见的场景,可能需要自定义Span定制文本样式:Android 提供了一些内置的Span类,如和StyleSpan,但有时可能需要更多样化的文本样式,例如自定义字体、阴影效果等。原创 2023-06-28 20:29:53 · 465 阅读 · 0 评论 -
Android性能优化系列:VSync、Choreographer 和 Render Thread
使用 60fps 帧率除了该帧率足够”欺骗“人类大脑感受到流畅的体验外,还有就是刷新频率即和硬件有关,现在大部分手机屏幕的刷新频率都维持在 60Hz,移动设备一般使用 60Hz,是因为移动设备对于功耗的要求更高,提高手机屏幕的刷新频率功耗会随着频率的增大而线性增大,同时更高的刷新频率也意味着更短的TFT数据写入时间,对于屏幕设计来说难度更大。针对图片的非连续性,人眼的辨识力还是非常高的,例如,如果以 60fps 的速度运动,然后时不时突然降至 20fps,人眼就会察觉到这里面的不流畅性。转载 2022-12-19 18:02:52 · 1320 阅读 · 0 评论 -
Android通过WindowInsetsController设置系统栏颜色、Behavior、显示隐藏等
隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会再次显示且会在一段时间后再次自动隐藏。隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会再次显示且。隐藏后,从隐藏栏的屏幕边缘滑动,系统栏会。:默认设置,当系统栏通过。设置的有两个值,一个是。方法获取,还可以通过。原创 2022-12-19 15:08:04 · 3637 阅读 · 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 · 1326 阅读 · 0 评论 -
Android 深入理解View.post()获取宽高、Window加载View原理
继承自接口,提供了添加、删除、更新View的API,可以看作是WMS在客户端的代理类。实现了ViewParent接口,其是整个View树的根部,View的测量、布局、绘制以及输入事件的处理都由触发;另外,它还是的实际工作者,负责与WMS交互通信以及处理WMS传过来的事件(窗口尺寸改变等)。的生命从setView()开始,到die()结束,ViewRootImpl起到了承上启下的作用。原创 2022-11-21 01:58:16 · 2210 阅读 · 0 评论 -
Android仿淘宝、京东Banner滑动查看图文详情
本文基于ViewPager2实现的Banner效果,进而实现了仿淘宝、京东Banner滑动至最后一页时继续滑动来查看图文详情的效果。原创 2022-10-01 13:07:43 · 2319 阅读 · 0 评论 -
Android深入理解文字绘制:FontMetrics字体测量及其TextPaint介绍
`TextPaint`是`Paint`的子类,用它可以很方便的进行文字的绘制,一般情况下遇到绘制文字的需求时,我们一般用`TextPaint`所提供的方法。开始学习如何绘制文字之前,我们必须要先了解下`android`中文字是怎么绘制到屏幕上的,文字的格式又是怎么样的。...转载 2022-07-04 15:43:41 · 2602 阅读 · 0 评论 -
RecyclerView、View的onAttachedToWindow和onDetachedFromWindow调用时机
onAttachedToWindow和onDetachedFromWindow在RecyclerView中调用时机转载 2022-06-09 18:38:59 · 2070 阅读 · 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 · 482 阅读 · 0 评论 -
Android 深入理解ViewPager2原理及其实践(上篇)
ViewPager2介绍原创 2022-01-29 16:51:02 · 9591 阅读 · 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 · 2279 阅读 · 6 评论 -
Android使用RecycleView实现魅族手机通讯录界面
本文主要是通过模仿魅族通讯录,学习一下RecycleView的基本用法,水平有限,如有不当之处,欢迎批评指正,不胜感激!先看通过RecycleView实现的一个效果图: 完整代码见github:仿魅族通讯录Recycleview继承关系: RecycleView的三个主要参与者: 1、LayoutManager 2、ItemAnimator 3、ItemDecoration 本文主要原创 2017-05-31 10:54:29 · 4921 阅读 · 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 · 4014 阅读 · 0 评论 -
Android高仿QQ小红点
上一篇文章分析了QQ侧滑栏的实现, 文章地址: http://www.jianshu.com/p/1834ce7a2ce7 ,本篇继续来实现一下QQ小红点的功能,闲言少叙,先上效果图:代码已上传至Github:高仿QQ小红点,如对您有帮助,欢迎star~感谢绘制贝塞尔曲线:主要是当在一定范围内拖拽时算出固定圆和拖拽圆的外切直线以及对应的切点,就可以通过path.quadTo()来绘制二阶贝塞尔曲线原创 2017-06-20 00:21:20 · 2084 阅读 · 0 评论 -
Android高仿QQ侧滑菜单
先上效果图: GIF图有点模糊,源码已上传Github:Android仿QQ侧滑菜单整体思路:自定义ItemView的根布局(SwipeMenuLayout extends LinearLayout),复写onTouchEvent来处理滑动事件,注意这里的滑动是View里面内容的滑动而不是View的滑动,View里内容的滑动主要是通过scrollTo、scrollBy来实现,然后自定义SwipeR原创 2017-06-13 10:12:52 · 3509 阅读 · 1 评论 -
Android Paint.Xfermode及离屛绘制
离屏绘制通过使用离屛绘制,把要绘制的内容单独绘制在缓冲层,保证Xfermode的使用不会出现错误的结果。离屏缓冲的两种方式:Canvas.saveLayer() 可以做短时离屏缓冲,在绘制之前保存,绘制之后恢复,如://Canvas.saveLayer可以做离屏缓冲,在绘制之前保存当前图层,绘制之后恢复int saveId = canvas.saveLayer(0, 0, mWidth, mHeight, mUpPaint, Canvas.ALL_SAVE_FLAG);//绘制圆形canv原创 2021-03-21 20:42:55 · 752 阅读 · 0 评论 -
Android Canvas之Path操作
接上篇,Android自定义View工具:Paint&Canvas(二)上一篇中介绍的Canvas绘制图形只能画一些常规图形(圆,椭圆,矩形等),如果想绘制更复杂的图形,Path神器来了!Path是什么?Path类将多种复合路径(多个轮廓,如直线段、二次曲线、立方曲线)封装在其内部的几何路径。如何绘制Path:通过设置Paint的Style(FILL、STROKE、FILL_AND_STROKE),然后调用canvas.drawPath(path, paint);Path还可以用于剪切或者原创 2021-03-07 19:18:05 · 2558 阅读 · 0 评论 -
Android自定义View工具:Paint&Canvas(二)
接上篇,Android自定义View工具:Paint&Canvas(一),上篇主要介绍的是Paint,本篇接着来看Canvas。Canvas常用方法一览:Canvas常用方法备注绘制颜色drawARGB通过设置ARGB值绘制颜色drawRGB通过设置RGB值绘制颜色drawColor绘制颜色绘制图形drawPoint,drawPoints绘制点,点集合drawLine,drawLines绘制线,线集合drawRect绘原创 2021-03-07 19:15:50 · 303 阅读 · 0 评论 -
Android自定义View工具:Paint&Canvas(一)
安卓的graphics提供了2D图形各种绘制工具,如Canvas(画布), color filters(颜色过滤器), points(点), rectangles(矩形)等,利用这些工具可以直接在界面上进行绘制。本文主要讲的是自定义View时我们经常用到的Canvas和Paint,像平时画画一样,我们需要画布和画笔,而Canvas就是画布,Paint就是画笔.Canvas官网地址:https://developer.android.com/reference/android/graphics/Canv原创 2021-03-07 19:13:50 · 541 阅读 · 1 评论 -
Android Path测量工具:PathMeasure
PathMeasure是什么? 顾名思义,PathMeasure是用来对Path进行测量的,一般PathMeasure是和Path配合使用的,通过PathMeasure,我们可以知道Path路径上某个点的坐标、Path的长度等等,如果对Path不了解,可以先看下这篇文章:Android Canvas之Path操作PathMeasure有两个构造函数://构建一个空的PathMeasurePat原创 2017-02-14 11:09:52 · 710 阅读 · 0 评论 -
Android WindowManger实现桌面悬浮窗
文章目录效果图使用WindowManager实现分析问题参考如果想实现一个在桌面显示的悬浮窗,用Dialog、PopupWindow、Toast等已经不能实现了,他们基本都是在Activity之上显示的,如果想实现在桌面显示的悬浮窗效果,需要用到WindowManager来实现了。效果图使用WindowManager实现添加一个悬浮窗: sys_view = new SmallWindowView(mContext); sys_view.setText("50%原创 2021-03-06 19:40:49 · 5538 阅读 · 4 评论 -
Android之ViewPager+GridView实现GridView界面滑动
先上效果图:项目地址: https://github.com/crazyqiang/SlidePager 欢迎star!☺直接上代码 :MainActivity .java:public class MainActivity extends AppCompatActivity { public static int item_grid_num = 12;//每一页中GridVi原创 2016-12-14 13:56:35 · 2977 阅读 · 2 评论 -
Android自定义View中的常用方法(距离、位置、点击事件)
View介绍的官网地址: https://developer.android.com/reference/android/view/View.html屏幕的左上角为坐标的原点,屏幕上边缘往右为X轴正方向,屏幕左边缘往下为Y轴正方向.view自身坐标:getLeft(),getTop(),getRight(),getBottom() view自身宽高: getWidth(),getMeasured原创 2016-12-14 13:54:04 · 3298 阅读 · 0 评论 -
android自定义View&自定义ViewGroup(下)
接上篇, android自定义View&自定义ViewGroup(上) 上篇主要是自定义View,本篇来看看自定义ViewGroup。先来复习一下一般自定义ViewGroup中需要复写的方法:void onMeasure(int widthMeasureSpec, int heightMeasureSpec)void onSizeChanged(int w, int h, int oldw,原创 2016-12-20 15:35:33 · 413 阅读 · 0 评论 -
android自定义View&自定义ViewGroup(上)
一般自定义view需要重写的方法void onMeasure(int widthMeasureSpec, int heightMeasureSpec)void onSizeChanged(int w, int h, int oldw, int oldh)void onDraw(Canvas canvas)一般自定义ViewGroup需要重新的方法void onMeasure(int widthM原创 2016-12-20 15:28:47 · 815 阅读 · 0 评论 -
Android中SVG的使用姿势
SVG是什么? - SVG 意为可缩放矢量图形(Scalable Vector Graphics), - SVG 用来定义用于网络的基于矢量的图形 - SVG 使用 XML 格式定义图形 - SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 - SVG 是万维网联盟的标准 - SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体SVG的历史和优势在 2003 年一原创 2017-02-17 10:16:04 · 1556 阅读 · 0 评论 -
Android 编写一个带进度条的Webview
用Webview加载一个网页时,如果加载时间长,界面会一直空白,体验不太好,所以加个进度条更好看一下,主流APP也都有进度条效果,先上效果图: 完整代码地址已上传Github:带进度条的Webview之前看到一篇博文:Android WebView顶部进度条,作者直接用的ProgressBar方式实现的,但不知是代码有问题,还是我的使用姿势不对,一进来加载进度条就直接到100%了,有知道问题出在哪原创 2017-04-04 20:47:16 · 517 阅读 · 0 评论 -
Android ViewTreeObserver使用总结及获得View高度的几种方法
ViewTreeObserver 注册一个观察者来监听视图树,当视图树的布局、视图树的焦点、视图树将要绘制、视图树滚动等发生改变时,ViewTreeObserver都会收到通知,ViewTreeObserver不能被实例化,可以调用View.getViewTreeObserver()来获得。ViewTreeObserver继承关系:public final class ViewTreeObserve原创 2017-04-19 10:12:49 · 3315 阅读 · 1 评论 -
Android View滑动相关的基础知识点
本文涉及到的知识点:MotionEvent、ViewConfiguration、VelocityTracker 、GestureDetector、scrollTo、scrollBy、Scroller、OverScrollerMotionEventACTION_DOWN :手指刚接触到屏幕 ACTION_MOVE :手指在屏幕上移动 ACTION_UP :手指在屏幕上松开的一刹那原创 2017-06-13 10:17:34 · 1236 阅读 · 0 评论