从API级别21开始是可能的.从文档( https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html...physical dimensions of the full pixel array. […] Units: Millimeters 我用这种代码.请注意,可能不仅仅是一台摄像头: import android.hardware.camera2....CameraAccessException; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2...别忘了添加android:minSdkVersion =“21”/>到你的清单.
3、设置渲染方向 4、设置 Shader.TileMode.MIRROR 渲染模式 5、设置 Shader.TileMode.REPEAT 渲染模式 三、代码示例 1、正常渲染 2、设置多个渐变颜色渲染...3、设置渲染方向 4、设置 Shader.TileMode.MIRROR 渲染模式 5、设置 Shader.TileMode.REPEAT 渲染模式 四、效果展示 一、LinearGradient 线性渐变渲染...new float[]{0f, 0.5f, 1.0f}, Shader.TileMode.CLAMP)); } 效果图 : 3、设置渲染方向...设置渲染方向 : private void initRect(int width, int height) { mRectF = new RectF(0, 0, width,...super.onDraw(canvas); // 正式绘制矩形 canvas.drawRect(mRectF, mPaint); } } 3、设置渲染方向
文章目录 一、获取图像真实宽高 二、计算解码区域 三、设置解码参数 内存复用 像素格式 四、图像绘制 五、执行效果 六、源码及资源下载 官方文档 API : BitmapRegionDecoder 在...【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 ) 基础上继续开发 ; 一、获取图像真实宽高 ---- 显示的图像是一张长图 , 在该组件中 , 宽度肯定要完整显示出来 , 解码图片的不同高度的数据...; 首先要测量图片数据的真实宽高 , 然后根据图像的宽高 , 与组件的宽高 , 以及要显示的图像位置 , 计算要解码的图像区域 ; 参考 【Android 内存优化】Bitmap 图像尺寸缩小 ( 设置...图像绘制 : ① 设置图像区域解码器 : 在为自定义组件设置图片时 , 设置区域解码器 , 因为要设置区域解码的数据源 , 因此必须在用户设置图片时 , 才可以创建区域解码器 ; ② 设置内存复用 :...方法 , 解码图片的特定区域 ; ④ 设置图片缩放 : 使用 Matrix 进行图像缩放 ; 图像与自定义组件的尺寸不同 , 因此需要将解码区域完全填充到自定义组件中显示 ; ⑤ 图像绘制 : 调用
文章目录 一、 Camera 传感器方向简介 二、 Camera 图像传感器横向显示数据 三、 Camera 图像传感器纵向显示数据 四、 设置 Camera 预览数据方向 五、 Camera 使用流程...纠正图像预览方向 : Google 官方提供了设置 Camera 预览方向的方式 , 以下代码定义在 Camera#setDisplayOrientation 文档注释中 , 为 Camera 设置了以下参数后...NV21 数据方向 : NV21 格式的图像数据的的实际方向还是错误的方向 , 需要用户自己使用时纠正 ; /** * 设置 Camera 预览方向 * 如果不设置, 视频是颠倒的...Android 6.0 以下静态设置权限 : AndroidManifest.xml 设置静态权限 ; android:name="android.permission.INTERNET...Android 6.0 以上动态获取权限 : /** * 需要获取的权限列表 */ private String[] permissions = new String
metrics.widthPixels * metrics.density / metrics.densityDpi; // 2.0 在AndroidManifest.xml中添加 android...:anyDensity=”true”/> 之后 或者是添加android:minSdkVersion=”4″ /> 之后(最小版本号是4以及以上) Display display
获取 Handler 五、HandlerThread 设置空闲队列 六、HandlerThread 代码示例 一、HandlerThread 初始化 ---- 初始化 HandlerThread ,...= looper.queue }else{ // 反射获取 MessageQueue 消息队列 // 设置访问字段...Looper , 获取 Looper 中封装的 消息队列 MessageQueue , 6.0 之后直接调用 getQueue 获取 , 6.0 之前使用反射获取 , 设置空闲任务 IdleHandler...Handler , 使用 Handler 发送消息 ; package kim.hsl.handler import android.os.* import android.os.Handler import...android.os.Looper import android.os.Message import android.os.MessageQueue import android.util.Log import
文章目录 一、进程注入原理 二、远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一、进程注入原理 ---- 调试进程...Attach 被调试进程 : 工具程序 ( 调试进程 ) 获取调试 目标进程 ( 被调试进程 ) 的权限 , 调用 ptrace 函数 , 传入 PTRACE_ATTACH 参数 ; 如果 目标进程...动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) ---- 远程调用 的 核心就是 要 准确的计算 要远程调用的 SO 动态库的库函数 在内存中的地址...被调试进程 ) 又称为 " 被控制进程 " , 对应下图的 控制进程 , 被控制进程 在 内存中 , 也占据一定的控件 ; 控制进程 与 被控制进程 在内存中 , 先后顺序不确定 ; 下图的内存是 Android...函数在 libc.so 的相对偏移量 ( 如 : 8 字节 ) 也是确定的 , 这样就可以知道 dlopen 函数在内存中的地址 ; 获取到 dlopen 函数地址后 , 将 IP 寄存器设置成 r_dlopen
《Android开发艺术探索》读书笔记 (6) 第6章 Android的Drawable 本节和《Android群英传》中的第六章Android绘图机制与处理技巧有关系,建议先阅读该章的总结 第6章...(3)Drawable的内部宽/高可以通过getIntrinsicWidth和getIntrinsicHeight方法获取,但是并不是所有Drawable都有内部宽/高。...当图片尺寸被拉伸或压缩时,开启过滤效果可以保持较好的显示效果,建议开启; android:gravity:当图片小于容器的尺寸时,设置此选项可以对图片进行定位。...repeat是指水平和竖直方向上的平铺效果;mirror是指在水平和竖直方向上的镜面投影效果;clamp是指图片四周的像素会扩展到周围区域,这个比较特别。 (2)ShapeDrawable <?...篇 5.Android样式的开发:Style篇 OK,本章结束,谢谢阅读。
线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ---- 1....(ANDROID_LOG_INFO, "JNI_TAG", "threadRun"); //JNIEnv 不能跨线程使用 , 这里需要先获取本线程的 JNIEnv JNIEnv *env...; import android.util.Log; import android.widget.TextView; import android.widget.Toast; public class...> //Java 虚拟机指针 , 在 JNI_OnLoad 方法中设置该值 JavaVM *_vm; //JNI 方法参数中的第二个参数 , 需要先将局部变量转为全局变量 , 然后再其它方法中调用...(ANDROID_LOG_INFO, "JNI_TAG", "threadRun"); //JNIEnv 不能跨线程使用 , 这里需要先获取本线程的 JNIEnv JNIEnv *env
官方文档 API : BitmapRegionDecoder 在【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制...) 博客中完成了图像的区域解码 , 并显示在界面中 ; 本篇博客中主要完成长图滑动功能 , 触摸滑动 , 惯性滑动 , 操作 ; 一、GestureDetector 创建与设置 ---- 1 ....设置惯性滑动区域 : 惯性滑动后 , View 组件的 computeScroll 方法会自动回调 , 在这里计算 区域解码的 Rect 区域 , 计算完成后重绘组件 ; /** *...; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Rect; import...android.os.Build; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent
GetArrayLength 方法解析 ( 获取 jarray 数组长度 ) ---- 1 ....日志库配置 : ① 导入日志库 : #include android/log.h> ② CMake 设置日志库 : add_library 设置动态库名称 , find_library 中为 查找日志库...k 个元素的值 */ for(int i = 0; i < len; i ++){ //获取第 i 个元素的首地址 , 使用 *num 可以获取第 i 个元素的值...操作 jint * 指针变量 , 循环获取数组中每个元素的值 /* 获取数组长度 函数原型 : jsize GetArrayLength(jarray array...k 个元素的值 */ for(int i = 0; i < len; i ++){ //获取第 i 个元素的首地址 , 使用 *num 可以获取第 i 个元素的值
文章目录 一、 头文件、成员变量准备 二、 创建 FAAC 编码器 三、 获取并设置 FAAC 编码器参数 四、 设置 FAAC 编码器编码标准 五、 设置 FAAC 编码器 AAC 编码规格 六、 设置...FAAC 编码器输入、输出格式 七、 FAAC 设置音频编码参数代码 Android 直播推流流程 : 手机采集视频 / 音频数据 , 视频数据使用 H.264 编码 , 音频数据使用 AAC 编码...x264 编码器参数 , 对应 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据...获取编码器参数 : 先获取参数, 然后设置参数, 最后再设置回去 faacEncConfigurationPtr configurationPtr = faacEncGetCurrentConfiguration...); 先获取 FAAC 编码器参数 faacEncConfigurationPtr 结构体 , 然后设置编码器参数 , 最后再将编码器参数 设置回 FAAC 编码器 FaacEncHandle ; 四、
字符间距(kerning) 对于textView和Paint绘制的Text,可以分别使用各自类中的getLetterSpacing()和setLetterSpacing()方法获取和设置字符间距,对于TextView...,一共有三种,LEFT、CETNER和RIGHT,默认值为LEFT,它的作用是在绘制的时候确定绘制的方向,例如设置为LEFT,那么文本绘制的时候,就是从baseline的StartX开始向右绘制文本,如果是...CENTER,那么就是从StartX开始,向两边开始绘制文字,同理,RIGHT为StartX向左开始绘制文本,这里要注意的是,TextAlign确定的是方向,而非在显示区域内的对齐方式,它的一个作用是帮助开发者进行居中的绘制...文本的居中绘制 Android中文本的绘制都是使用baseline进行定位的,通过fontMetrics和已知的区域坐标,是可以推算出文字的其它关键坐标的,所以,文本在任意区域的任意位置绘制问题,其实就是一个坐标运算的问题...这个方法在一些自定义文本绘制的场景下比较常用,例如阅读类APP的文字排版,需要在换行的时候动态折断或生成一行新的字符串。 基本使用方式如下所示。
中的 id) scrollDirection:滚动方向,默认是垂直 reverse:是否按照阅读方向相反的方向滑动。...中的 id) scrollDirection:滚动方向,默认是垂直 reverse:是否按照阅读方向相反的方向滑动。...在滚动过程中可以避免重绘,如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addSemanticIndexes:表示是否给子元素添加索引,默认为 true cacheExtent:设置预加载的区域...itemCount, ); key:当前元素的唯一标识符(类似于 Android 中的 id) scrollDirection:滚动方向,默认是垂直 reverse:是否按照阅读方向相反的方向滑动...在滚动过程中可以避免重绘,如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addSemanticIndexes:表示是否给子元素添加索引,默认为 true cacheExtent:设置预加载的区域
文章目录 前言 一、获取要注入事件的 View 对象 二、通过反射获取 View 组件的事件设置方法并执行 前言 Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性...; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ; 在博客 【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤...; 第二个是修饰注解的注解 , 该注解用于配置注入的方法 ( 事件监听方法 | 监听器类型 | 监听器回调方法 ) ; 事件依赖注入比较复杂 , 涉及到动态代理 , 本博客分析 【IOC 控制反转】Android...View 组件的事件设置方法并执行 ---- 获取 View 组件的事件设置方法 , 如果设置的是点击事件 , 就是获取 setOnClickListener 方法 , 如果设置的是长按事件 , 就是获取...onLongClickListener 方法 , 如果设置的是触摸方法 , 就是获取 setOnTouchListener 方法 ; 获取方法时 , 需要传入方法的参数 , 就是设置的事件监听器对象
id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置。...shadowDx:设置阴影在水平方向的偏移,即水平方向阴影开始的横坐标位置。 shadowDy:设置阴影在竖直方向的偏移,即竖直方向阴影开始的纵坐标位置。 3.带边框的TextView ?...android:maxWidth:置文本区域的最大宽度。 android:minWidth:设置文本区域的最小宽度。 android:maxHeight:设置文本区域的最大高度。...android:minHeight:设置文本区域的最小高度。 android:textScaleX:设置文字之间间隔,默认为1.0f。...android:drawableXxx:在text的Xxx方向输出一个drawable,如图片。
错切(skew) 作用:将画布在x方向倾斜a角度、在y方向倾斜b角度 具体使用: // 参数 sx = tan a ,sx>0时表示向X正方向倾斜(即向左) // 参数 sy = tan b ,sy>0...//将第二次裁剪的区域设置为蓝色 canvas.drawColor(Color.BLUE); Region.Op.INTERSECT:显示第二次与第一次的重叠区域 //原来画布设置为灰色...总结 通过阅读本文,相信你已经全面了解Canvas类的使用; Carson带你学Android自定义View文章系列: Carson带你学Android:自定义View基础 Carson带你学Android...:一文梳理自定义View工作流程 Carson带你学Android:自定义View Measure过程 Carson带你学Android:自定义View Layout过程 Carson带你学Android...:自定义View Draw过程 Carson带你学Android:手把手教你写一个完整的自定义View Carson带你学Android:Canvas类全面解析 Carson带你学Android:
notifyItem***方法,从而动态刷新某项视图; 3、除了当前页,也支持展示左右两页的部分区域; 4、支持在翻页过程中展示自定义的切换动画; 虽然ViewPager2增加了这么棒的功能,但它用起来非常简单...setOrientation:设置二代翻页视图的翻页方向。..._content); // 设置二代翻页视图的排列方向为水平方向 vp2_content.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL...如果把翻页方向改为垂直方向,那么翻页之时的界面如下图所示。 ? 以上的效果图看起来仅仅多了垂直翻页,稍等片刻给它加上其它特效。...android:layout_weight="1" /> 2、打开该页面的Java代码,分别获取TabLayout和ViewPager2的视图对象,再利用TabLayoutMediator
图片上边界-放大 上边界黑线表示水平方向上,黑线覆盖的区域可以拉伸,同理左边界黑线表示垂直方向上黑线覆盖的区域可以拉伸;对应而言,右边界和下边界分别表示垂直方向上和水平方向上黑线覆盖的区域可以填充内容...在水平和竖直方向上,黑线覆盖的区域用于填充文本。 绘制操作 那么如何绘制出黑线呢?...在Android Studio的.9.png绘制面板中可以看到图片的上下左右区域,如下图红色框框区域。 ?...若绘制黑线后需要对黑线覆盖的区域进行调整,可将鼠标移至黑线两段的竖直方向的线,按住鼠标进行拖动可调整黑线的长度(覆盖区域)。 ?...感谢阅读!
= (RecyclerView) findViewById(R.id.recyclerView); initAdapter(); // 新建一个线性布局管理器,并且设置排布方向为竖直方向...linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); // 设置子项排布方向...(left, top, right, bottom); // 设置绘制区域,下同 myDivider.draw(canvas); // 在Canvas对象上绘制区域...(left, top, right, bottom); // 设置绘制区域 myDivider.draw(canvas); child =...在MainActivity中加了一个网格布局,并且设置排布方向和每一行显示的子项数,之后调用了MyItemDecoration的第二个适用于网格布局的构造方法。
领取专属 10元无门槛券
手把手带您无忧上云