自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(3)
  • 资源 (5)
  • 收藏
  • 关注

原创 基于RecyclerView实现模仿IOS风格的滚轮选择器(一)

相信大部分android开发者都曾经遇到过所有UI交互都要和ios保持一致的奇葩需求。android的MD设计风格毕竟已经出来好久了,但是国内很多app的安卓端几乎都没有按照MD风格设计,而是一味模仿ios的风格。但吐槽归吐槽,作为一个开发者,要时刻能够迎接各种奇葩需求,并在快速时间里设计完成符合需求的方案出来。这篇文章介绍本人曾用两天开发出来的一个模仿ios滚轮选择器的库。ios的滚轮选择器

2018-02-02 11:51:06 4217 2

原创 Android 自定义Textview实现文字两端对齐功能和长按自由选择文字弹出自定义ActionMenu功能(二)自定义ActionMenu

写在前面: 去年年初本来计划写完这一系列文章的,结果一拖再拖,转眼就又一年过去了,今年决定定制一个计划,好好写博客,再也不拖拖拉拉的了~~这篇文章主要讲解如何自定义TextView的长按文字弹出ActionMenu的功能。在上一篇里已经介绍了文字两端对齐处理和长按选择文字并高亮文本 这两部分,在阅读这篇文章前,如果没有读过上一篇,建议点这里了解一下,这样更有助于熟悉这一篇要介绍的内容。在

2018-02-02 11:01:52 2295 1

原创 SnakeMaker:模仿实现 即刻APP 头像拖动的残影效果

一直比较喜欢即刻APP的交互效果,作为一个比较注重交互体验的安卓开发爱好者,自然不免会关注它的交互体验以及实现方式。其中的头像拖动效果一直让我觉得挺有意思:https://www.zhihu.com/video/927920856120823808头像拖动时会产生残影,拖动结束时残影也会慢慢消失。最初看到这种效果就被吸引了,一直沉迷于思考如何实现这种效果。但实在是太懒,经常思考出实现方式后

2018-02-02 08:58:29 1318

数字图像处理_冈萨雷斯(第三版_中文版)带完整书签.pdf

数字图像处理_冈萨雷斯(第三版_中文版)带完整书签

2019-05-28

Programming_Kotlin

google官方推荐的kotlin权威教程 。

2018-04-07

Kotlin_in_Action 英文 带完整书签和个人批注笔记

Kotlin_in_Action 英文 带完整书签和个人批注笔记 。

2018-04-07

JNI完全技术手册 带完整书签

Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:jni教程(very very good) 19 Chap6: JNI传递返回值... 26 15.2.2.3 传递字符串... 28 15.2.2.4 传递整型数组... 29 15.2.2.5 传递字符串数组... 30 15.2.2.6 传递对象数组... 31 Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 3、实例三、在jni函数中访问java类中的对象实例域... 58 4、实例四:在jni函数中访问类的静态实例域... 60 5、实例五:在jni函数中调用java对象的方法... 60 6、实例六:在jni函数中调用java类的静态方法... 61 7、实例七:jni函数中传递基本数据类型参数... 62 8、实例八:在jni函数中传递对象类型参数... 62 9、实例九:在jni函数中处理字符串... 63 10、实例十:在jni函数中处理数组... 64 11、实例十一:在jni中的返回值问题... 65 12、实例十二:在jni中创建java类对象:... 66 Chap10:在 Windows 中实现 Java 本地方法... 66 1.Java 调用 C. 67 2.调试... 76 3.其他信息... 79 Chap11:如何在C/C++中调用Java. 80 1.环境搭建... 81 2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步访问... 91 10.时间... 92 Chap12:基本JNI调用技术(c/c++与java互调) 93 Chap13:JNI的c代码中,另外一个线程获取 JNIEnv. 96 chap 14:当JNI遇到多线程--java对象如何被C++中的多个线程访问?. 97 chap 15:JNI在多线程中的应用... 101 chap 16:JNI限制(多线程)... 105 chap 17:使用 Java Native Interface 的最佳实践... 106 1.性能缺陷... 107 2.正确性缺陷... 117 3.避免常见缺陷... 121 4.结束语... 128 Chap18:JNI设计实践之路... 129 一、 前言... 129 二、 JNI基础知识简介... 130 三、 Java程序调用非Java程序... 131 四、 C/C++访问Java成员变量和成员方法... 138 五、 异常处理... 140 六、 MFC程序中嵌入Java虚拟机... 142 Chap19:JNI编程系列之基础篇... 148 System.loadLibrary("HelloWorld"); 149 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 150 Chap20:JNI编程系列之中级篇(上)... 151 1. Java基本类型的传递... 151 2. String参数的传递... 151 3. 数组类型的传递... 153 4. 二维数组和String数组... 154 Chap21:JNI编程系列之高级篇... 155 1. 在一般的Java类中定义native方法... 156 2. 访问Java类的域和方法... 156 3. 在native方法中使用用户定义的类... 157 4. 异常处理... 158

2018-04-06

Android C++高级编程:使用NDK_中文_完整书签

第1章 Android平台上的C++入门 1 1.1 Microsoft Windows 1 1.1.1 在Windows平台上下载并安装JDK开发包 2 1.1.2 在Windows平台上下载并安装Apache ANT 5 1.1.3 在Windows平台上下载并安装Android SDK 7 1.1.4 在Windows平台上下载并安装Cygwin 8 1.1.5 在Windows平台上下载并安装Android NDK 11 1.1.6 在Windows平台上下载并安装Eclipse 13 1.2 Apple Mac OS X 14 1.2.1 在Mac平台上安装Xcode 14 1.2.2 验证Mac平台的Java开发包 15 1.2.3 验证Mac平台上的Apache ANT 15 1.2.4 验证GNU Make 16 1.2.5 在Mac平台上下载并安装Android SDK 16 1.2.6 在Mac平台上下载并安装Android NDK 18 1.2.7 在Mac平台上下载并安装Eclipse 19 1.3 Ubuntu Linux 20 1.3.1 检查GNU C库版本 20 1.3.2 激活在64位系统上支持32位的功能 21 1.3.3 在Linux平台上下载并安装Java开发工具包(JDK) 21 1.3.4 在Linux平台上下载并安装Apache ANT 22 1.3.5 在Linux平台上下载并安装GNU Make 22 1.3.6 在Linux平台上下载并安装Android SDK 23 1.3.7 在Linux平台上下载并安装Android NDK 24 1.3.8 在Linux平台上下载并安装Eclipse 25 1.4 下载并安装ADT 26 1.4.1 安装Android平台包 29 1.4.2 配置模拟器 30 1.5 小结 33 第2章 深入了解Android NDK 35 2.1 Android NDK提供的组件 35 2.2 Android NDK的结构 36 2.3 以一个示例开始 36 2.3.1 指定Android NDK的位置 37 2.3.2 导入示例项目 37 2.3.3 向项目中添加原生支持 39 2.3.4 运行项目 40 2.3.5 用命令行对项目进行构建 41 2.3.6 检测Android NDK项目的结构 42 2.4 构建系统 42 2.4.1 Android.mk 43 2.4.2 Application.mk 53 2.5 使用NDK-Build脚本 54 2.6 排除构建系统故障 55 2.7 小结 56 第3章 用JNI实现与原生代码通信 57 3.1 什么是JNI 57 3.2 以一个示例开始 57 3.2.1 原生方法的声明 58 3.2.2 加载共享库 58 3.2.3 实现原生方法 59 3.3 数据类型 64 3.3.1 基本数据类型 64 3.3.2 引用类型 64 3.4 对引用数据类型的操作 65 3.4.1 字符串操作 65 3.4.2 数组操作 67 3.4.3 NIO 操作 68 3.4.4 访问域 69 3.4.5 调用方法 71 3.4.6 域和方法描述符 72 3.5 异常处理 75 3.5.1 捕获异常 75 3.5.2 抛出异常 75 3.6 局部和全局引用 76 3.6.1 局部引用 76 3.6.2 全局引用 76 3.6.3 弱全局引用 77 3.7 线程 78 3.7.1 同步 78 3.7.2 原生线程 79 3.8 小结 79 第4章 使用SWIG自动生成JNI代码 81 4.1 什么是SWIG 81 4.2 安装 82 4.2.1 Windows平台上SWIG的安装 82 4.2.2 在Mac OS X下安装 83 4.2.3 在Ubuntu Linux下安装 85 4.3 通过示例程序试用SWIG 86 4.3.1 接口文件 86 4.3.2 在命令行方式下调用SWIG 89 4.3.3 将SWIG集成到Android构建过程中 90 4.3.4 更新Activity 92 4.3.5 执行应用程序 93 4.3.6 剖析生成的代码 93 4.4 封装C语言代码 94 4.4.1 全局变量 94 4.4.2 常量 95 4.4.3 只读变量 96 4.4.4 枚举 97 4.4.5 结构体 100 4.4.6 指针 101 4.5 封装C++代码 101 4.5.1 指针、引用和值 102 4.5.2 默认参数 103 4.5.3 重载函数 104 4.5.4 类 104 4.6 异常处理 106 4.7 内存管理 107 4.8 从原生代码中调用Java 108 4.8.1 异步通信 108 4.8.2 启用Directors 109 4.8.3 启用RTTI 109 4.8.4 重写回调方法 109 4.8.5 更新HelloJni Activity 110 4.9 小结 110 第5章 日志、调试及故障处理 111 5.1 日志 111 5.1.1 框架 111 5.1.2 原生日志API 112 5.1.3 受控制的日志 114 5.1.4 控制台日志 118 5.2 调试 119 5.2.1 预备知识 119 5.2.2 调试会话建立 120 5.2.3 建立调试示例 121 5.2.4 启动调试器 121 5.3 故障处理 126 5.3.1 堆栈跟踪分析 127 5.3.2 对JNI的扩展检查 128 5.3.3 内存问题 130 5.3.4 strace 133 5.4 小结 134 第6章 Bionic API入门 135 6.1 回顾标准库 135 6.2 还有另一个C库 136 6.2.1 二进制兼容性 136 6.2.2 提供了什么 136 6.2.3 缺什么 137 6.3 内存管理 137 6.3.1 内存分配 137 6.3.2 C语言的动态内存管理 138 6.3.3 C++的动态内存管理 139 6.4 标准文件I/O 141 6.4.1 标准流 141 6.4.2 使用流I/O 141 6.4.3 打开流 142 6.4.4 写入流 143 6.4.5 流的读取 145 6.4.6 搜索位置 148 6.4.7 错误检查 149 6.4.8 关闭流 149 6.5 与进程交互 150 6.5.1 执行shell命令 150 6.5.2 与子进程通信 150 6.6 系统配置 151 6.6.1 通过名称获取系统属性值 152 6.6.2 通过名称获取系统属性 152 6.7 用户和组 153 6.7.1 获取应用程序用户和组ID 153 6.7.2 获取应用程序用户名 154 6.8 进程间通信 154 6.9 小结 154 第7章 原生线程 155 7.1 创建线程示例项目 155 7.1.1 创建Android项目 155 7.1.2 添加原生支持 157 7.1.3 声明字符串资源 157 7.1.4 创建简单的用户界面 157 7.1.5 实现Main Activity 159 7.1.6 生成C/C++头文件 162 7.1.7 实现原生函数 163 7.1.8 更新Android.mk构建脚本 165 7.2 Java 线程 165 7.2.1 修改示例应用程序使之能够使用Java线程 165 7.2.2 执行Java Threads示例 166 7.2.3 原生代码使用Java线程的优缺点 167 7.3 POSIX线程 168 7.3.1 在原生代码中使用POSIX线程 168 7.3.2 用pthread_create创建线程 168 7.3.3 更新示例应用程序以使用POSIX线程 169 7.3.4 执行POSIX线程示例 174 7.4 从POSIX线程返回结果 174 7.5 POSIX线程同步 176 7.5.1 用互斥锁同步POSIX线程 176 7.5.2 使用信号量同步POSIX线程 180 7.6 POSIX线程的优先级和调度策略 180 7.6.1 POSIX的线程调度策略 181 7.6.2 POSIX Thread优先级 181 7.7 小结 181 第8章 POSIX Socket API:面向连接的通信 183 8.1 Echo Socket示例应用 183 8.1.1 Echo Android应用项目 184 8.1.2 抽象echo activity 184 8.1.3 echo应用程序字符串资源 188 8.1.4 原生echo模块 188 8.2 用TCP sockets实现面向连接的通信 191 8.2.1 Echo Server Activity的布局 192 8.2.2 Echo Server Activity 193 8.2.3 实现原生TCP Server 194 8.2.4 Echo客户端Activity布局 206 8.2.5 Echo客户端Activity 208 8.2.6 实现原生TCP客户端 210 8.2.7 更新Android Manifest 213 8.2.8 运行TCP Sockets示例 214 8.3 小结 217 第9章 POSIX Socket API:无连接的通信 219 9.1 将UDP Server方法添加到 Echo Server Activity中 219 9.2 实现原生UDP Server 220 9.2.1 创建UDP Socket:socket 220 9.2.2 从Socket接收数据报:recvfrom 221 9.2.3 向Socket发送数据报:sendto 223 9.2.4 原生UDP Server方法 224 9.3 将原生UDP Client方法加入 Echo Client Activity中 225 9.4 实现原生UDP Client 226 9.5 运行UDP Sockets示例 228 9.5.1 连通UDP的模拟器 228 9.5.2 启动Echo UDP Client 229 9.6 小结 229 第10章 POSIX Socket API:本地通信 231 10.1 Echo Local Activity布局 231 10.2 Echo Local Activity 232 10.3 实现原生本地Socket Server 237 10.3.1 创建本地Socket:socket 237 10.3.2 将本地socket与Name绑定:bind 238 10.3.3 接受本地Socket:accept 240 10.3.4 原生本地Socket Server 240 10.4 将本地Echo Activity添加到Manifest中 242 10.5 运行本地 Sockets示例 243 10.6 异步I/O 243 10.7 小结 244 第11章 支持C++ 245 11.1 支持的C++运行库 245 11.1.1 GAbi++ C++运行库 246 11.1.2 STLport C++运行库 246 11.1.3 GNU STL C++运行库 246 11.2 指定C++运行库 246 11.3 静态运行库与动态运行库 247 11.4 C++异常支持 247 11.5 C++ RTTI支持 248 11.6 C++标准库入门 249 11.6.1 容器 249 11.6.2 迭代器 250 11.6.3 算法 251 11.7 C++运行库的线程安全 251 11.8 C++运行库调试模式 251 11.8.1 GNU STL调试模式 251 11.8.2 STLport调试模式 252 11.9 小结 253 第12章 原生图形API 255 12.1 原生图形API的可用性 255 12.2 创建一个AVI视频播放器 256 12.2.1 将AVILib作为NDK的一个导入模块 256 12.2.2 创建AVI播放器Android应用程序 258 12.2.3 创建AVI Player的Main Activity 258 12.2.4 创建Abstract Player Activity 262 12.3 使用JNI图形API进行渲染 269 12.3.1 启用JNI Graphics API 269 12.3.2 使用JNI Graphics API 270 12.3.3 用Bitmap渲染来更新AVI Player 271 12.3.4 运行使用Bitmap渲染的AVI Player 278 12.4 使用OpenGL ES渲染 279 12.4.1 使用OpenGL ES API 279 12.4.2 启用OpenGL ES 1.x API 279 12.4.3 启用OpenGL ES 2.0 API 280 12.4.4 用OpenGL ES渲染来更新AVI Player 280 12.5 使用原生Window API进行渲染 290 12.5.1 启用原生Window API 290 12.5.2 使用原生Window API 291 12.5.3 用原生window渲染器来更新AVI Player 293 12.5.4 EGL图形库 301 12.6 小结 301 第13章 原生音频API 303 13.1 使用OpenSL ES API 303 13.1.1 与OpenSL ES标准的兼容性 304 13.1.2 音频许可 304 13.2 创建WAVE音频播放器 304 13.2.1 将WAVELib作为NDK导入模块 304 13.2.2 创建WAVE播放器Android应用程序 306 13.2.3 创建WAVE播放器主Activity 306 13.2.4 实现WAVE Aduio播放 310 13.3 运行WAVE Audio Player 327 13.4 小结 328 第14章 程序概要分析和NEON优化 329 14.1 用GNU Profiler度量性能 329 14.1.1 安装Android NDK Profiler 329 14.1.2 启用Android NDK Profiler 330 14.1.3 使用GNU Profiler分析gmon.out文件 331 14.2 使用ARM NEON Intrinsics进行优化 332 14.2.1 ARM NEON技术概述 333 14.2.2 给AVI Player添加一个亮度过滤器 333 14.2.3 为AVI播放器启用Android NDK Profiler 336 14.2.4 AVI Player程序概要分析 337 14.2.5 使用NEON Intrinsics优化Brightness Filter 338 14.3 自动向量化 342 14.3.1 启用自动向量化 343 14.3.2 自动向量化问题的发现和排除 344 14.4 小结 344

2018-03-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除