![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 68
沙漠一只雕得儿得儿
沙漠一只雕,白月光与朱砂痣
展开
-
关于Image scaleType的属性详解,以及每一个属性的区别
以原图填满ImageView为目的,如果原图size大于ImageView的size,则与center_inside一样,按比例缩小,居中显示在ImageView上。如果原图size小于ImageView的size,则按比例拉升原图的宽和高,填充ImageView居中显示。以原图正常显示为目的,如果原图大小大于ImageView的size,就按照比例缩小原图的宽高,居中显示在ImageView中。把原图按照比例放大缩小到ImageView的高度,显示在ImageView的center(中部/居中显示)。..原创 2022-07-25 19:23:45 · 528 阅读 · 0 评论 -
Android textView文字渐变色设置
方式二:原创 2022-07-07 10:08:21 · 2869 阅读 · 0 评论 -
@JsonAdapter注解使用
你真的会用Gson吗?Gson使用指南(四) - 简书 你真的会用Gson吗?Gson使用指南(一) - 简书 Gson使用总结 - 掘金接管了序列化和反序列化过程,而和则只分别单独接管序列化和反序列化过程。作用在POJO类上的,接收一个参数,且必须是TypeAdpater,JsonSerializer或JsonDeserializer这三个其中之一。前面的和都要配合使用,但每次使用都要注册也太麻烦了,就是为了解决这个痛点的。使用:...原创 2022-06-29 19:33:51 · 995 阅读 · 0 评论 -
@SerializedName注解使用
有时服务端返回给我们一些字段名不适合作为java bean的名称,我们可以使用@SerializedName注解,来给服务端返回的字段取别名。例如下面服务端返回的json,1234是一堆无意义的名称,而我们需要明确1234每个字段的含义,这时取个别名就可以很方便后续的开发:在Android开发中,使用第三方Gson包解析json成对象时默认的是将json文件里对应字段,解析到java代码里的属性字段里面。像Result标签可以将json数据解析成java对象,但是Data中的数据表示一脸懵,总不可能写原创 2022-06-29 17:20:16 · 5143 阅读 · 2 评论 -
Android 11(Android R)状态栏高度获取
以前公共库里的代码,发现是使用如下代码获取状态栏高度的:其实从 Android 9 开始,就已经对通过反射调用非公开 API 的方式进行警告了。Android 11以前的系统,只是给出警告, Android 11直接抛出了调用异常。于是搜索一下,发现网上已经更改成如下方法了:仔细观察两个方法,会发现,其实两者都是获取了系统里的状态栏使用的某个资源的高度信息,然后作为状态栏的高度信息。另外,网上流传的另一段代码方案三:WindowMetrics是Android11新增的类,用于获取窗口原创 2022-06-27 14:23:09 · 2320 阅读 · 0 评论 -
横向滚动的RecycleView一屏显示五个半,低于五个平均分布
无原创 2022-06-22 10:48:33 · 577 阅读 · 0 评论 -
Android 手势识别GestureDetector
检测用户在屏幕的以下操作:按下瞬间、按压、长按、轻击、快速滑屏、拖动检测用户单击、双击屏幕1. 作用集成了两个接口的手势检测功能2. 与上述两个接口的区别使用示例: 参考Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解) - 云+社区 - 腾讯云......原创 2022-06-21 17:29:21 · 926 阅读 · 0 评论 -
ConstraintLayout官方提供圆角ImageFilterView
印象中这应该是第一次官方提供具有圆角功能的view了吧,除了圆角功能外,还有一堆其他的功能。使用效果:原创 2022-06-17 11:43:25 · 2193 阅读 · 0 评论 -
ConstraintLayout的流式布局
流式布局的实现方式有很多种,比如,或者等,无论哪种实现,都不如来的更灵活,更简单。 这里我们进行动态添加,效果如下: 代码非常简单,即使用动态添加布局即可:XML代码仅包含一个flow即可:使用原生代码写flow流式布局是不是很简单呢。具体Flow的一些具体属性可以看ConstraintLayout 2.0新特性解析(一)--Flow流式布局 - 简书核心就是使用属性:将7个ImageView约束起来。......原创 2022-06-17 11:19:07 · 1801 阅读 · 0 评论 -
文字自适应大小AppCompatTextView使用
AppCompatTextView作用是根据字数自动调整字号大小,防止字数太多时文字被截断或者省略号的出现。而传统的TextView无法自动调整文字大小,超出会截断或者显示省略号。比如有一个TextView,它的宽度最大是100dp,而它的文字长度不确定,一般是由服务端下发。这个时候产品需求是不管多少都要显示完全,文字多时自动变小,文字少时自动变大,不允许截断或者出现省略号。这种情况下,TextView就不满足我们的需要,AppCompatTextView就闪亮登场了。下面是一个使用示例:当字数比较少原创 2022-06-16 14:36:22 · 1638 阅读 · 0 评论 -
TabLayout+NestedScrollView实现tab和scrollView滑动关联
效果如上图所示,当选中头部某个tab,下部视图滑动到具体内容,或者视图滑动到某具体内容时,tab页自动选中某tab。现在实现这种效果很简单的,做个简单总结。这里使用TabLayout+NestedScrollView ,TabLayout负责头部tab,NestedScrollView 负责界面上下滑动的视图。首先是布局文件:activity_main.xml需要注意的一点是,里面的定位view都在LinearLayout布局内部,如果各个定位的view都用LinearLayout包裹则在使用oneS原创 2022-06-15 15:48:34 · 862 阅读 · 0 评论 -
图形图像概念以及在android中的应用
走进图形的世界提起图形处理和显卡相关的内容,尤其是玩电脑游戏的时候(通常是安装时)很多人是不是很容易就想起了一个熟悉的名词叫做Direct X,通常什么Direct 9.0c之类的东西都是打游戏必备的。那么大家知道DirectX是什么吗?另外你知道一个类似名词OpenGL是什么吗?本文将对他们进行简要的介绍和对比,希望对大家了解和显卡密切相关的Direct X和OpenGL。Direct X是什么Direct X是Direct eXtension的简写,可以进一步简写成DX。为微软公司开发的多媒原创 2022-02-13 10:46:29 · 3512 阅读 · 0 评论 -
Android应用加固原理
一、前言Android开发者常常面临的一个问题就是防破解、 防二次打包。现如今安全问题越来越重要,越来越多的Android开发者也开始寻求安全的保护方案。二、什么是加壳?移动平台攻防技术的发展基本是沿着PC端发展轨迹在进行,从windows平台的加壳脱壳反调试到Andriod的平台apk加固,反调试代码混淆等。加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下:images三原创 2022-02-13 10:41:32 · 999 阅读 · 0 评论 -
Android图形图像相关(二)
Android硬件加速(二)-RenderThread与OpenGL GPU渲染https://www.jianshu.com/p/dd800800145b对于Android APP而言,基于GPU的硬件加速绘制可以分为如下几个阶段:第一阶段:APP在UI线程构建OpenGL渲染需要的命令及数据 第二阶段:CPU将数据上传(共享或者拷贝)给GPU,PC上一般有显存一说,但是ARM这种嵌入式设备内存一般是GPU、CPU共享内存 第三阶段:通知GPU渲染,一般而言,真机不会阻塞等待GPU渲染原创 2021-04-01 15:55:40 · 158 阅读 · 0 评论 -
Android硬件加速、图形绘制相关
Android硬件加速原理与实现简介https://tech.meituan.com/2017/01/19/hardware-accelerate.htmlSurfaceFinger工作流程https://juejin.cn/post/6898525503960186887详细文章见 Android-SurfaceFlinger启动与工作原理surfaceflinger 是在 Android 系统启动时解析 init.rc 文件启动的守护进程,在 SurfaceFlinger .原创 2021-04-01 15:35:24 · 696 阅读 · 0 评论 -
handler的同步屏障使用场景
结论:为当前线程的 MessageQueue 添加同步屏障来屏蔽同步消息,保证 VSync 信号到来后立即执行绘制,而不是要等前面的同步消息。https://juejin.cn/post/6894206842277199880系统显示原理:显示系统一般包括 CPU, GPU 以及 Display 三个部分,CPU负责计算帧数据,把计算好的数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到buffer(图像缓冲区)里存起来,然后Display(屏幕或显示器)负责把buffer里的数据呈现原创 2021-04-01 14:49:49 · 1136 阅读 · 0 评论 -
Android图形图像相关(一)
Android 图形组件https://source.android.com/devices/graphics综述:应用开发者可通过三种方式将图像绘制到屏幕上:使用画布、OpenGL ES或Vulkan。无论开发者使用什么渲染 API,一切内容都会渲染到Surface上。Surface 表示缓冲区队列中的生产方,而缓冲区队列通常会被 SurfaceFlinger 消耗。在 Android 平台上创建的每个窗口都由 Surface 提供支持。所有被渲染的可见 Surface 都被 Surf...原创 2021-04-01 14:29:48 · 424 阅读 · 0 评论 -
查找gradle最新版本
去官网下载即可:https://services.gradle.org/distributions/将gradle配置文件中的版本改为官网中存在的版本即可原创 2021-03-31 17:16:51 · 631 阅读 · 0 评论 -
activity任务栈和启动模式
唠唠任务栈,返回栈和启动模式https://zhuanlan.zhihu.com/p/210825079?utm_source=wechat_sessiontaskAffinity前面提到了Activity 想要的任务栈,taskAffinity的作用就是指定想要的任务栈。但它并不会在任何场景下都会起作用。未显式声明 taskAffinity 的 Activity 都具有默认的任务栈,该任务栈的名称是应用包名。当启动模式设置为standard或singleTop时,它...原创 2021-03-31 14:22:13 · 288 阅读 · 0 评论 -
Android窗口机制(五)最终章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast
转自:https://www.jianshu.com/p/bac61386d9bf前面几篇文章基本介绍完Activity上的窗口机制,但是我们常见的窗口就还有Dialog,Toast这些,本篇文章就来介绍这两个的窗口机制以及WindowManager.LayoutParams和TokenWindowManager.LayoutParams首先,先跟大家介绍这个WindowManager.LayoutParams,在前面几篇文章中,都有出现过这个LayoutParams,我们看下具体的源码。.转载 2021-03-27 16:39:48 · 1253 阅读 · 0 评论 -
Android面试:ViewRootImpl相关
Android窗口机制系列:Android窗口机制(一)初识Android的窗口结构Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解Android窗口机制(三)Window和WindowManager的创建与ActivityAndroid窗口机制(四)ViewRootImpl与View和WindowManagerAndroid窗口机制(五)最终章:WindowManager.LayoutParams和Token以及其他窗口Dial原创 2021-03-27 16:19:28 · 389 阅读 · 0 评论 -
ContentProvider妙用 --- 完成application初始化
我们都知道 ContentProvider 的 onCreate() 的调用时机介于 Application 的 attachBaseContext() 和 onCreate() 之间。那么有些操作需要在application中初始化的工作我们完全可以放到ContentProvider中处理,leakCanary2.0就是这么做的,把 init 的逻辑放到库内部,让调用方完全不需要在 Application 里去进行初始化了,十分方便。这样下来既可以避免开发者忘记初始化导致一些错误,也可以让我们庞大的原创 2021-03-27 14:21:51 · 1360 阅读 · 0 评论 -
Android Stuido4.1 的R.java位置
在主工程的目录下\build\generated\not_namespaced_r_class_sources\debug\r\com\xxx包名\R.java原创 2021-03-23 17:13:30 · 426 阅读 · 0 评论 -
Android measure、layout、draw耗时对比
内容RelativeLayout、LinearLayout、FrameLayout、ConstraintLayout这四种类型的measure、layout、draw耗时对比。java测试试图结构:测试方式使用一个结构很是深的试图结构,重复执行measure、layout、draw各1000次。计算耗时。web结果(单位:ms):总结能够看出,各类布局除了measure差异比较大外,layout和draw耗时差异不大。 RelativeLayout在measure这一步转载 2021-03-23 16:02:16 · 912 阅读 · 0 评论 -
AIDL相关
一、AIDL oneway 以及in、out、inout参数的理解https://blog.csdn.net/anlian523/article/details/98476033onewayoneway可以用来修饰在interface之前,这样会造成interface内所有的方法都隐式地带上oneway;oneway也可以修饰在interface里的各个方法之前。被oneway修饰了的方法不可以有返回值,也不可以有带out或inout的参数。用 oneway 修饰的 AIDL 接口方法,原创 2021-03-23 14:55:15 · 417 阅读 · 0 评论 -
Android进程间通信 深入浅出AIDL
文中示例代码均可在demo中找到1. AIDL概念Android 接口定义语言 (AIDL) 与您可能使用过的其他接口语言 (IDL) 类似.您可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信.在 Android 中,一个进程通常无法访问另一个进程的内存.因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象.编写执行该编组操作的代码较为繁琐,因此 Android 会使用 AIDL 为您处理此问题.跨进程通信(I转载 2021-03-23 14:29:49 · 358 阅读 · 0 评论 -
Android解析Asset目录下的json文件
在app module中的src/main/assets目录下我们准备了两个json文件:destination.json如下:{ "main/tabs/sofa": { "isFragment": true, "asStarter": false, "needLogin": false, "pageUrl": "main/tabs/sofa", "className": "com.test.ppjoke.ui.notifications.Notif原创 2021-01-31 09:14:21 · 1062 阅读 · 2 评论 -
Android自定义注解生成文件
步骤一:新建注解的java module:新module的gradle配置文件如下:plugins { id 'java-library'}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar'])}java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersio原创 2021-01-30 20:56:22 · 625 阅读 · 0 评论 -
Android onSaveInstanceState和onRestoreInstanceState调用时机、及大小限制
对于 Activity 的 onSaveInstanceState 方法大家都不会陌生,当 Activity 在不正常销毁的情况下,就会调用 onSaveInstanceState 方法,并将 Activity 中需要保存的数据(比如 View 状态 或者我们自己的数据)保存到这个方法的参数 Bundle 中。一、onSaveInstanceState(Bundle outState)的调用时机onSaveInstanceState(Bundle outState)会在以下情况被调用:1、当用户按下原创 2021-01-29 17:01:56 · 2897 阅读 · 1 评论 -
Activity与View的生命周期
启动一个带ImageView的Activity:在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了View的绘制工作: onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw 当按住锁屏键的时候,即.转载 2020-08-17 17:17:23 · 601 阅读 · 0 评论 -
Activity与SurfaceView的生命周期
程序启动,并且直接开启mediaPlayer播放视频:跳转到第二个activity:跳转回surfaceView的activity:back键退出activity:原创 2020-08-17 17:16:18 · 895 阅读 · 0 评论 -
onPause耗时导致Activity pause timeout for ActivityRecord的ANR分析
activity的几个生命周期都是在主线程中执行的,因此在主线程中执行耗时操作后再次点击屏幕按键会产生ANR。还有特别需要注意在onPause中尽量不要做过多的耗时操作,可以将耗时操作移动到onStop中,在ActivityStack.java类中,我们可以看到生命周期的超时时间:onPause是500毫秒 onStop和onDestory是10秒// How long we wait ...原创 2020-04-26 16:00:46 · 10599 阅读 · 3 评论 -
Android中Intent对象与Intent Filter过滤匹配过程详解
如果对Intent不是特别了解,可以参见博文《Android中Intent概述及使用》,该文对本文要使用的action、category以及data都进行了详细介绍。如果想了解在开发中常见Intent的使用,可以参见《Android中常见Intent习惯用法-上篇(附源码下载)》。本文内容有点长,希望大家可以耐心读完。本文在描述组件在manifest中注册的Intent Filter过滤器...转载 2020-04-23 16:41:14 · 477 阅读 · 0 评论 -
Android intent URI跳转以及参数拼接
intent传递参数的方式有两种,一种是大家熟悉的extra,键值对的形式,直接传递参数;另一种就是uri的方式。方式一:intent传参,将参数放到bundle中,如下例子中,有一个playInfo的key里面有一个JSONObject的字符串:Intent intent = new Intent(ACTION_DETAIL); Bundle bundle = new ...原创 2020-03-30 21:41:03 · 6362 阅读 · 0 评论 -
Android颜色int和RGB相互转化
将RGB转化为int:int color=Color.rgb(red, green, blue)如果需要透明度int color=Color.argb(a,red, green, blue)将int 转化为 RGBint red = (color & 0xff0000) >> 16;int green = (color & 0x00ff...原创 2020-02-28 23:20:40 · 4647 阅读 · 0 评论 -
Android打印主线程所有方法执行时间、handler耗时
前言:我们知道Android卡顿主要是主线程中有耗时操作导致的,那么我们怎么能方便快捷的获取主线程中的所有耗时方法执行时间呢?今天我们来介绍两个方案方案一:利用Looper.java中loop()方法的logging.print的特殊关键字进行耗时打印:在消息分发时,主线程的looper.loop()方法会遍历所有的消息进行分发,执行耗时任务。我们看下源码的loop()方法:fo...原创 2020-02-22 17:48:58 · 5978 阅读 · 3 评论 -
切面编程AOP之AspectJ之快速上手简易实例
AOP面向切面编程(Aspect-Oriented Programming)。如果说,OOP如果是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理。Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。根据切面代码所产生的注入代码时间不同可以分为下面三个大的方向:最上层的编译时注解(APT),应该是这其中我们最常见到的了,...原创 2020-02-04 21:26:19 · 526 阅读 · 0 评论 -
Android按键判重或者长按只处理一次事件 KeyEvent event.getRepeatCount
一些按键(Media Key Back Key)在系统分发时,做了特殊处理:当按下时,发送Message去调用KeyEvent.changeTimeRepeat这样长按时,会发多次KeyEvent.ACTION_DOWN,第一次event.getRepeatCount()返回0;第二次event.getRepeatCount()返回1;……避免长按多次调用onKeyDo...原创 2020-02-03 13:17:48 · 3251 阅读 · 0 评论 -
handler相关学习(二)handler的相关问题
本篇接上篇看一些handler的相关问题消息阻塞和延时Looper 的阻塞主要是靠 MessageQueue 来实现的,在next()@MessageQuese 进行阻塞,在 enqueueMessage()@MessageQueue 进行唤醒。主要依赖 native 层的 Looper 依靠 epoll 机制进行的。阻塞和延时,主要是next()中nativePollOnc...原创 2020-02-01 18:27:01 · 390 阅读 · 1 评论 -
handler相关学习(一)手写Android消息机制
Android 的消息机制主要是指Handler得运行机制以上模型的解释: 1.以Handler的sendMessage方法为例,当发送一个消息后,会将此消息加入消息队列MessageQueue中。 2.Looper负责去遍历消息队列并且将队列中的消息分发给对应的Handler进行处理。 3.在Handler的handleMes...原创 2020-02-01 18:19:37 · 1627 阅读 · 0 评论