自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Android NV21与I420数据旋转90°

现在图片数据存储方式大体上分为两种,RGB和YUV模型,RGB本篇不讲,YUV是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间

2022-11-26 13:08:03 1094 1

原创 Rxjava原理分析之手写map操作符(二)

Rxjava原理分析之手写map操作符(二)续着上篇内容 Rxjava原理分析之使用与手写(一) ,这篇内容继续手写加入map操作符,map 操作符在Rxjava中的作用是起到事件类型的转换,比如事件类型从String类型转成Bitmap类型,在Android 中常用的例子如传入一个图片地址,然后转成一个Bitmap,最后拿到这个Bitmap 填充到ImageView 中,如下:Obserable.create(new ObservableOnSubscribe<String>() {

2022-04-20 07:57:47 1909

原创 Rxjava原理分析之使用与手写(一)

Rxjava原理分析之使用与手写(一)随着Rxjava 在Android中的应用越来越广泛,面试中难免会被问到关于Rxjava的内容,本文就来手写一下Rxjava的简单实现,通过手写简单的Rxjava 再去了解Rxjava的实现原理会更加容易理解Rxjava 为什么这么实现。Rxjava虽然说是基于观察者模式写的,但在我看来更像是基于责任链模式;在了解Rxjava之前首先要知道java中的泛型使用,泛型使用本文不讨论一、 Rxjava的使用项目 app 模块的集成,只使用原生Rxjava,RxAnd

2022-04-20 07:57:03 2025

原创 Handler native层实现原理

Handler native层实现原理1 概述​ 想要了解Handler 底层实现原理必须得了解以下知识,不然跳到底层去看源码也是一头雾水:C 与 C++,这个没什么好说的;Linux 的管道,主要是pipe函数 与 eventfd 函数来创建管道,pipe() , eventfd() ,主要了解这两个函数的作用就行,都是用于创建管道的函数;Linux 的epoll 机制;本文基于Android8.0源码,几乎所有版本的Handler底层源码逻辑都一样,不同的是低版本使用pipe()

2022-01-20 13:44:03 1663 1

原创 事件分发流程图

Android 事件分发流程图

2021-10-25 10:09:57 226

原创 Android Handler如何保证每个线程有且只有一个Looper

Android Handler如何保证每个线程有且只有一个Looper​ Android 开发中避免不了使用Handler,最常用的就是子线程更新ui 需要使用Handler切换到UI 线程;下面通过源码分析解释Handler 机制中每个线程只能有一个Looper对象。中UI 线程分析,Android app 启动的时候,首先经过AcitivtyThread 的main()方法,main() 方法中调用了两个方法,分别是Looper.prepareMainLooper(); 与Looper.loop()

2021-10-14 16:19:49 1378 1

原创 Android自定义内容滚动控件

效果图:源码:public class RollView extends FrameLayout { private static final int DEFAULTTEXTSIZE = 16; private static final int DEFAULTTEXTHEIGHT = 72; private List<?> contents = new LinkedList<>(); private float textSize;

2020-10-28 10:48:31 188 1

原创 SharedPreferences管理

管理SharedPreferences 存储,把每个Class类当成一个文件进行存储,用到了Gson 解析,果然Gradle 先导入gson保存DataEntry dataEntry = new DataEntry();boolean save = SharedPreferencesManager.create(DataEntry.class).save(dataEntry);获取:DataEntry obtain = SharedPreferencesManager.obtain(DataEn

2020-10-22 17:45:44 122

原创 Ijkplayer实现录像和截图功能

Android Ijkplayer 播放器实现录制与截图功能怎么编译Ijkplayer 这里就不说了,自行百度吧​ 截图、录制的实现是根据某个变量条件判断的,视频在播放过程中不断循环获取数据进行解封装、解压缩,在这过程中,根据一个变量判断是否需要截图或录制视频;截图 的变量理应是一次性的,完成截图功能之后,把对应截图变量变成假;录制则根据用户停止或者读取到文件结尾后停止录制1、截图实现原理是在播放画面之前,判断是否需要截图,是则拿到 AVFrame对其进行编码,然后封装成一个图片文件2、录制也是一样

2020-10-15 17:40:40 4911 50

原创 Android 编译SDL2

Android 使用cmake 编译SDL2SDL2官网下载如这里解压得到 SDL2-2.0.12:几个重要的目录与文件说明android-project: Android 项目的模板项目docs:说明文档include:SDL2的头文件src:SDL2的源文件Android.mk: makefile的构建脚本,编译动态库和静态库CmakeLists.txt: CMake的构建脚本,编译动态库和静态库1、搭建项目​ 使用android-project 作为一个模板搭建一个项目,必

2020-09-25 14:56:36 1434 1

原创 RecyclerView瀑布流Item 高度间隔问题

分割线public class MyItemDecoration extends RecyclerView.ItemDecoration { private final int spec; public MyItemDecoration(Context context, int dpValue) { spec = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, context.

2020-09-14 17:37:46 781

原创 C 函数参数传递一级指针和二级指针的区别

一、概念1、一级指针和二级指针指针保存的只是地址,这一点不用忘了一级指针:指向变量的指针,保存的是该变量的地址;二级指针:指向一级指针的指针,保存的也是地址,这个地址是一级指针变量的地址;如: int a = 1; int* p = &a; //一级指针,p保存的是变量a的地址,*p 是取到变量a 的值 int** _p = &p; //二级指针,_p保存的一级指针变量p的地址,*_p 取到的是一级指针变量p的地址,**_p 取到一级指针p所指向地址的值(这里**_p 的

2020-08-13 15:35:30 1574

转载 Android下各个按键对应的key code

出处:http://www.51testing.com/html/84/65284-824014.htmlKEYCODE_UNKNOWN=0;KEYCODE_SOFT_LEFT=1;KEYCODE_SOFT_RIGHT=2;KEYCODE_HOME=3;KEYCODE_BACK=4;KEYCODE_CALL=5;KEYCODE_ENDCALL=6;KEYCODE_0=7;KEYCODE_1=8;K...

2017-05-04 10:19:53 849

空空如也

空空如也

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

TA关注的人

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