
Android之朝花夕拾
文章平均质量分 71
源码分析及应用
江太翁
这个作者很懒,什么都没留下…
展开
-
Android Composable 与 View 的联系和区别
优先选择 Compose:新项目、动态 UI(如动画、主题切换)或需快速迭代的场景沿用传统 View:维护旧项目或依赖原生控件(如 WebView、地图 SDK)的场景。原创 2025-03-14 15:04:24 · 446 阅读 · 0 评论 -
lambda c++/java/kotlin
在C++、Java和Kotlin中,lambda表达式都是一种简洁的表示匿名函数的方式,它们允许你以更直观和灵活的方式编写代码。下面我将通过一些例子来对比分析这三种语言中lambda表达式的使用。原创 2024-08-28 21:49:54 · 624 阅读 · 0 评论 -
UVCCamera 源码解析
本文将通过UVCCamera源码研究 概述相机传感器数据采集至USB数据传输整个过程。原创 2023-04-14 18:30:18 · 975 阅读 · 0 评论 -
UVCCamera OpenGL 添加时间戳水印
视频流添加水印方式较多 本文只从渲染角度修改修改 CameraViewInterface 预览视图 自定义 CameraSurfaceView 将相机预览数据输出到外部纹理 通过fbo 混合水印纹理及Camera纹理 最终输出到 SurfaceView 上打开相机输出到外部纹理创建外部纹理 及 SurfaceTextureRenderThread 中绑定EGL上下文 绑定显示窗口缓冲区RenderThread WHEN_DIRTY渲染1 创建FBO 关联 frameBuffferTex绑定FBO。原创 2023-04-17 17:12:32 · 969 阅读 · 0 评论 -
隐私合规 权限解耦
前段时间各大平台app市场纷纷加大app审核力度,android生态环境日趋健康,在日常的客户端开发当中,我们就需要时刻持有隐私安全的意识,让自己站在用户的角度上合理的保证隐私安全。本文只探讨 动态权限授予实现解耦调用流程private fun userRequestPermissions() { val permissionCameraLinkedViewModel = PermissionCameraLinkedVie...原创 2022-03-15 14:04:30 · 2793 阅读 · 0 评论 -
gradle 脚本 debug
一、新增一个Remote运行项第1步第2步第3步二、编辑gradle.properties文件-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005修改gradle.properties配置三、重新运行,对build.gradle文件进行断点1、切换为remoteDebug,debug模式运行切换remoteDebug运行项2、..转载 2022-02-23 18:13:43 · 1307 阅读 · 0 评论 -
WMS 之 多屏
WMS负责管理window, window可绑定一个或多个Display物理设备, 也可生成镜像 到VirtualDisplay以下通过模拟器 模拟一个扩展屏选择其中一项 默认会复制主屏的内容 我们通过代码设置后 辅屏就可以显示独立的内容了常见的HDMI 及车载多屏app基本都通过Presentation 实现public class Presentation extends Dialog 可见Presentation也是个window通过下面的方法切换显示设备...原创 2022-02-11 17:51:54 · 1247 阅读 · 0 评论 -
蓝牙键鼠 HID Reports
鼠标发送给PC的数据每次4个字节:BYTE1 BYTE2 BYTE3 BYTE4。定义分别是:BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256~255的范围,0表示没有溢出 |--bit6: 1 表示 X 坐标的变化量超出-256~255的范围,0表示没有溢出 |--bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动 |--bit4: X 坐标变化的符号位,1表示负数,...原创 2022-01-20 17:06:37 · 3873 阅读 · 0 评论 -
Kotlin的独门秘籍Reified 实化类型参数
翻译说明:原标题: Getting Real with Kotlin's Reified Type Parameters原文地址:typealias.com/guides/gett…原文作者:Dave Leeds历史背景:我们都知道Java中的泛型是在JDK1.5的版本引入的,可是集合Collection在JDK1.2版本中就引入的,我们现在所看到的List<T>,是在泛型出来后加入的,那么JDK1.2之前就直接用List(java中俗称原生态类型)表示。问题来了为了兼容..转载 2021-11-03 15:21:23 · 523 阅读 · 0 评论 -
ViewDragHelper 容易忽略的工具类
在Android中避免不了自定义ViewGroup,来实现我们原生控件所不能满足的需求。尤其是复杂的ViewGroup实现,手势的处理是避免不了的。我们要针对不同的ViewGroup来实现不同的onInterceptTouchEvent与onTouchEvent事件等。ViewDragHelper可以帮助我们解决负责的手势操作。它是官方所提供的一个专门为自定义ViewGroup处理拖拽的手势类。下面是官方的原文引用说明ViewDragHelper is a utility class for wr原创 2021-09-18 17:34:23 · 186 阅读 · 0 评论 -
Gradle
步骤1 创建buildSrc在项目工程的根目录下创建buildSrc目录,这个名字不能错,必须是buildSrc。创建完之后,rebuild一下工程,会在buildSrc下生成一些目录。编译之后 目录变色2创建build.gradle...原创 2021-09-09 15:43:42 · 328 阅读 · 0 评论 -
android 插件化方案对比及原理
一、技术背景 Android的插件化技术,目前已经比较成熟,微信、淘宝、携程、360手机助手中都应用到了插件化。插件化技术的特点是无需单独安装apk,即可运行,即插即用,无需升级宿主应用,减少app的更新频率,除此之外他还可以降低模块耦合,按需加载,节省流量等特点。二、已有框架技术对比 表1从是否支持四大组件、是否须在主manifest预注册等多个维度对主流开源框架进行对比,从而筛选出比较符合项目的框架有VirtualAPK、RePlugin。表1主流开源框...转载 2021-09-08 15:25:23 · 3338 阅读 · 0 评论 -
RecyclerView ItemTouchHelper
ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类。基本使用 1继承 ItemTouchHelper.Callback主要方法方法名 作用 getMovementFlags 在此方法里面我们需要构建两个flag,一个是dragFlags,表示拖动效果支持的方向,另一个是swipeFlags,表示侧滑效果支持的方向。在我们的Demo中原创 2021-09-06 16:55:13 · 965 阅读 · 0 评论 -
RecyclerView的缓存机制
我们知道,RecyclerView在大量数据时依然可以丝滑般顺畅的滑动,那它究竟是怎么实现的呢,而RecyclerView之所以好用得益于它优秀的缓存机制。我们知道,RecyclerView本身是一个ViewGroup,因此在滑动时就避免不了添加或移除子View(子View通过RecyclerView#Adapter中的onCreateViewHolder创建),如果每次使用子View都要去重新创建,肯定会影响滑动的流畅性,所以RecyclerView通过Recycler来缓存的是ViewHolder(转载 2021-09-06 10:22:39 · 1303 阅读 · 1 评论 -
Android StrictMode
研究glide源码时发现了下面一段代码 @Override public synchronized Thread newThread(@NonNull Runnable runnable) { final Thread result = new Thread(runnable, "glide-" + name + "-thread-" + threadNum) { @Override public void r原创 2021-08-31 12:00:39 · 206 阅读 · 0 评论 -
NestScrollView
NestedScrollView即支持嵌套滑动的ScrollView。无论是作为父控件还是子控件,都支持,且默认开启MD NestScroll嵌套滑动机制解决了传统 Android 事件无拦截无重载 分发无法共享事件这个问题。(当子控件消费了事件, 那么父控件就不会再有机会处理这个事件了, 所以一旦内部的滑动控件消费了滑动操作, 外部的滑动控件就再也没机会响应这个滑动操作了.)嵌套滑动机制原理:嵌套滑动的基本原理是在子控件接收到滑动一段距离的请求时,先询问父控件是否要滑动, 如果滑...原创 2021-08-31 00:00:52 · 897 阅读 · 0 评论 -
ScrollView源码分析
从Touch分发看滚动原理SDK 基于 5.0 1 onInterceptTouchEvent 是否拦截Touch 如果返回true,则onTouchEvent会被调用,并处理滑动事件。注意:ACTION_DOWN 时并未拦截 ACTION_CANCLE |UP 清除mIsBeingDragged ACTION_MOVE时mIsBeingDragged =true 的条件 1有效移动距离大于 mTouchSl...原创 2021-08-30 22:04:20 · 493 阅读 · 0 评论 -
Scroller
Scroller 源码public class Scroller { //.... private int mStartX; //起始坐标点 , X轴方向 private int mStartY; //起始坐标点 , Y轴方向 private int mCurrX; //当前坐标点 X轴, 即调用startScroll函数后,经过一定时间所达到的值 private int mCurrY; //当前坐标点 Y轴, 即调用startScroll函...原创 2021-08-30 15:57:43 · 187 阅读 · 0 评论 -
JAVA 对象内存布局及创建过程
在 HotSpot 虚拟机中,对象在内存中存储的布局分为 3 块区域:对象头 ( Header ) 、实例数据 ( InstanceData ) 和对齐填充 (Padding) 。1、对象头“Mark Word”:存储对象自身的运行时数据,如:哈希码 ( HashCode ) 、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID 、偏向时间戳等。这部分数据的长度在 32 位和 64 位的虚拟机中分别为 32 bit 和 64 bit 。“Klass”:类型指针,指向该对象的类.原创 2021-08-30 11:46:38 · 183 阅读 · 0 评论 -
OpenGl 简易触摸放大器
//激活纹理单元 GLES20.glActiveTexture(GLES20.GL_TEXTURE0+textureType);//绑定纹理 GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,getTextureId()); GLES20.glUniform1i(mHTexture,textureType);效果如下主要代码GLSurfaceView mGLView = (GLSurfaceView) findV...原创 2021-08-28 19:07:00 · 512 阅读 · 0 评论 -
OpenGL ES 纹理 Webrtc
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,getTextureId());voidglBindTexture(GLenum target,GLuint texture);target指明了纹理要绑定到的目标。必须是下面中的一个:GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_RECTANGLE,...原创 2021-07-16 15:46:51 · 552 阅读 · 1 评论 -
OpenGl 投影矩阵 相机位置 方法参数说明
//设置透视投影Matrix.frustumM(mProjectMatrix, 0, -ratio, ratio, -1, 1, 3, 7);//设置相机位置Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);说明:相机位置 参照世界坐标系 eyeZ 平截面 以相机位置为原点//物体默认为 x,y,z 世界坐标系右手规则 (0.0,5)...原创 2021-07-13 17:21:14 · 1418 阅读 · 0 评论 -
android bitmap 缓存实现(OOM)
在android 应用中多数情况要和图片打交道,有时还要请求网络获取各种清晰度的图片,无论是处理本地还是网络图片,如果不能采取行之有效的处理机制, 当我们进行频繁操作或者仅展示几张高清图片时都难免碰到OOM问题。 是什么导致了OOM? 在Android中,一个JVM只能使用16M内存(如果framework未被定制),如果超过了这个限制就OOM。通常情况下我们可以简原创 2013-02-21 23:45:51 · 1399 阅读 · 0 评论 -
Activity 启动模式
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 Activity有四种加载模式,在AndroidManifest.xml文件中activity元素的android:原创 2012-11-22 23:36:53 · 951 阅读 · 0 评论