自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 资源 (4)
  • 收藏
  • 关注

原创 属性动画源码分析-start方法

属性动画的启动我们是通过如下来完成的: objectAnimator.start();//动画开始时从start方法开始的start()核心代码如下:AnimationHandler.getInstance().autoCancelBasedOn(this);super.start();start()方法主要做了两件事,一个是检测如果动画已经执行,则停止动画;另一...

2020-02-23 17:17:45 319

原创 属性动画源码分析-ofFloat方法

这里从最基本的使用分析源码,平时我们使用属性动画如下:ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(tv,"alpha",1.0f,0.3f,1.0f);//初始化动画objectAnimator.setDuration(200);objectAnimator.start();//动画开始时从start方法开始的...

2020-02-23 16:26:36 1134

原创 属性动画核心API以及使用

属性动画的原理:初始化动画值,然后把该值设置到属性中,接着注册垂直同步信号,最后进行View重绘。这个过程是一直循环进行的。动画对值进行了修改,但是没有涉及到重绘,是因为垂直同步信号,在安卓中每隔16ms发送一次,对View进行了重新绘制测量和布局。API3.0之后提出的动画模式,优点如下不再局限于View对象,无对象也可以进行动画处理。不再局限于4种基本变换:平移,旋...

2020-02-23 15:49:00 218

原创 Dagger基础-@Subcomponent和@Name

需要用到的相关的类对象类:HttpObject,DatabaseObjectModule类:HttpModule,DatabaseModuleComponent(组件):DatabaseComponent,HttpComponentHttpObject.javapublic class HttpObject { public String baseUrl; ...

2019-10-23 14:15:37 358

原创 Dagger使用自定义Score和组件依赖

知识点:如何使用自定义Score使用自定义Score实现全局单例Component(组件)与Component(组件)之间如何进行依赖问题:为什么使用Score?使用@Singleton经常会报错,语法规则也很多,我们可以使用 @Score来解决这个问题,Score意为作用域。Component(组件)与Component(组件)之间为什么需要依赖?意味同一个...

2019-10-23 13:38:22 178

原创 注册机ModelLoader

Glide通过ModelLoader完成图片的加载过程封装。public interface ModelLoader<Model, Data> { interface ModelLoaderFactory<Model, Data> { ModelLoader<Model, Data> build(ModelLoader...

2019-10-22 17:03:54 193

原创 Glide使用

图片所占内存的大小如何计算?比如图片是565格式的,一个像素点占2个字节,所占的内存大小为:width*height*2如果是8888格式的,一个像素点占4个字节,那所占的内存大小为:width*height*4Glide 使用简明的流式语法API,大多数情况下,可能完成图片的设置只需要:Glide.with(activity) .load(url) .into(i...

2019-10-22 15:45:44 401

原创 Dagger局部单例和全局单例-@Singleton

提供一个HttpObject对象public class HttpObject {}提供一个Module@Singleton@Modulepublic class HttpModule{ @Singleton @Provides public HttpObject provederHttpObject(){ return new...

2019-10-22 14:19:09 818

原创 Dagger最基本的使用

记录此文,以此学习dagger任意对象都是可以注入的,dagger主要用于中大型项目。Dagger的作用:省去了new对象的过程,增加开发效率每个app中的Application管理整个app的全局类实例,所有的全局类实例都统一交给ApplicationComponent管理,并且它们的生命周期与app的生命周期一样。每个页面对应自己的Component,页面Compon...

2019-10-22 14:05:19 541

原创 MVVM基本使用

app下的build.gradle中添加 dataBinding{ enabled true }MVVM的基本使用activity_main.xml<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/ap...

2019-10-21 18:13:27 456

原创 android MVP的基本使用

MVP的核心思想:原来的UI逻辑都抽象成一个View接口,业务逻辑抽象成precenter接口,model还是原来的model。model把数据返回给precenter,precenter再把数据返回给view,每个view都对应着一个precener,model可能是共用的。实体类Girlpublic class Girl { public int icon; ...

2019-10-21 11:55:09 181

原创 MediaCodec编码音频

使用MediaCodec编码AAC对Android系统是有要求的,必须是4.1系统以上,即要求Android的版本代号在Jelly_Bean以上。MediaCodec是Android系统提供的硬件编码器,它可以利用设备的硬件来完成编码,从而大大提高编码的效率,还可以降低电量的使用,但是其在兼容性方面不如软件编码好,因为Android设备的碎片化太严重,可以自己衡量在应用中是否使用...

2019-10-13 18:54:56 2061

原创 MediaCodec编码视频

在Android 4.3系统之后,用MediaCodec编码视频成为了主流的使用场景,尽管Android的碎片化比较严重,会导致一些兼容性问题,但是硬件编码器的性能以及速度是非常可观的,并且在4.3系统之后可以通过Surface来配置编码器的输入,大大降低了显存到内存的交换过程所使用的时间,从而使得整个应用的体验得到大大提升。由于输入和输出已经确定,因此接下来将直接编写Media...

2019-10-13 18:45:50 777

原创 OpenGL中的纹理

OpenGL中的纹理可以用来表示图像、照片、视频画面等数据,在视频渲染中,只需要处理二维的纹理,每个二维纹理都由许多小的纹理元素组成,它们都是小块数据,类似于前面章节所说的像素点。要使用纹理,最常用的方式是直接从一个图像文件加载数据。为了访问到每一个纹理元素,每个二维纹理都有其自己的坐标空间,其范围是从左下角的(0,0)到右上角的(1,1)。按照惯例,一个维度称为S,而另一个则称为...

2019-10-12 10:54:18 554

原创 Android平台上使用OpenGL ES-EGL

上下文环境搭建就像前面提到的,OpenGL不负责窗口管理及上下文环境管理,该职责将由各个平台或者设备自行完成。为了在OpenGL的输出与设备的屏幕之间架接起一个桥梁,Khronos创建了EGL的API,EGL是双缓冲的工作模式,即有一个Back Frame Buffer和一个Front Frame Buffer,正常绘制操作的目标都是Back Frame Buffer,操作完毕...

2019-10-12 10:21:45 781

原创 如何在应用程序中使用Shader(着色器)

前面已经学习了GLSL的语法以及内嵌函数,并且也已经完成了一组Shader的实例,那么,如何让显卡来运行这一组Shader呢?或者说如何用Shader来替换掉OpenGL渲染管线中的那两个阶段呢?下面就来学习一下如何将Shader传递给OpenGL的渲染管线。先来看一下下图,该图描述了如何创建一个显卡的可执行程序,后文中将其统称为Program。首先来看图的右半部...

2019-10-12 09:44:59 451

原创 GLSL的语法以及内嵌函数

如何编写着色器小程序?需要用到一门新的语言,GLSL,它是类似C风格的语言。GLSL全称为OpenGL Shading Language,是为了实现着色器的功能而向开发人员提供的一种开发语言,对其只要能理解到这个层次就可以了。GLSL语法与内建函数修饰符float? 浮点型vec2? 含两个浮点型数据的向量...

2019-10-11 15:55:20 1137

原创 AudioTrack

由于AudioTrack是Android SDK层提供的最底层的音频播放API,因此只允许输入裸数据。和MediaPlayer相比,对于一个压缩的音频文件(比如MP3、AAC等文件),它需要自行实现解码操作和缓冲区控制。首先来看一下AudioTrack的工作流程,具体如下。1)根据音频参数信息,配置出一个AudioTrack的实例。2)调用play方法,将AudioTrack...

2019-10-11 10:46:15 435

原创 ffmpeg基础

解封装.pngffmpeg的功能主要有两方面:解封装解码FFmpeg核心模块libavutil​ 核心工具库,该模块是最基础的模块之一,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。libavformat用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 li...

2019-10-10 17:46:46 91

原创 交叉编译概念

先来看一下,如果要在PC上运行一个二进制程序(以源码的方式进行编译,不要以包管理工具的方式来安装),需要怎样做?首先,要有这个二进制程序的源代码(有可能是直接下载的,也有可能是自己编写的代码),然后在PC上进行编译链接生成可执行文件,最后在Terminal下面去执行该可执行文件。上述流程中包含了几个角色,首先是要有源代码,然后是要知道最终运行该二进制程序的机器是哪一个(其实就是...

2019-10-10 15:04:38 615

原创 视频基础

三色光等量的三原色光相加会变为白光,即白光中含有等量的红光(R)、绿光(G)、蓝光(B)。分辨率和像素点假设一部手机屏幕的分辨率是1280×720,说明水平方向有720个像素点,垂直方向有1280个像素点,所以整个手机屏幕就有1280×720个像素点(这也是分辨率的含义)。每个像素点都由三个子像素点组成,这些密密麻麻的子像素点在显微镜下可以看得一清二楚。图像的数值表示任何...

2019-10-09 22:39:41 258

原创 音频基础

数字音频数字音频的操作需要3个步骤:采样,量化,编码。采样:这个是指音频的。首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化。采样率一般是44.1kHz,而所谓的44.1kHz就是代表1秒会采样44100次量化:是指在幅度轴上对信号进行数字化,比如用16比特的二进制信号来表示声音的一个采样,而16比特(一个short)所表示的范围是[-32768,32767...

2019-10-09 22:39:37 108

原创 ffmpeg中的pts和dts

pts反映帧什么时候开始显示,dts反映数据流什么时候开始解码怎么理解这里的“什么时候”呢?如果有某一帧,假设它是第10秒开始显示。那么它的pts是多少呢。是10?还是10s?还是两者都不是。为了回答这个问题,先引入FFmpeg中时间基的概念,也就是time_base。它也是用来度量时间的。如果把1秒分为25等份,你可以理解就是一把尺,那么每一格表示的就是1/25秒。此时的t...

2019-10-09 11:51:14 938

原创 Android-OpenSL ES

RGB、YUV这两个时图像原始格式PCM时声音的原始格式Android 播放 PCM 有的方式Java SDK: AudioTrack(播放pcm),AudioRecord(录制pcm)NDK : OpenSL ESAudioRecord:指定采集的声音格式采样率:1s 采集多少次声音 采集频率 HZ采样位:16bit 2字节声道数:单声道、双声道OpenS...

2019-10-08 15:50:16 161

原创 视频原生绘制

https://www.jianshu.com/p/2d2746cdeadd

2019-10-08 15:09:07 70

原创 Android音视频

解码与编码解码(解压)与解封装:将一个音视频文件解封装,这个过程分别生成视频和音频,然后将视频解码成图像原始模型RGB,亮度模型YUV。音频解码成PCM。编码(压缩)与封装:将一段图像+一段声音编码(压缩)成编码后的音视频,然后封装成flv,mp4,avi等格式的文件。Android操作图像:Java SDK: SurfaceView,TextureViewNDK ...

2019-10-08 15:00:54 99

原创 OpenGL ES

https://www.jianshu.com/p/acf26086cfac

2019-10-08 14:22:20 85

原创 AndroidStudio中使用CMake配置和build.gralde配置

https://www.jianshu.com/p/1684f5edb59b

2019-10-05 15:55:10 169

原创 交叉编译-生成动态库在AndroidStudio中使用

https://www.jianshu.com/p/5200e59ce9b9

2019-10-01 18:58:22 569

原创 交叉编译必知--gcc/g++详细讲解

https://www.jianshu.com/p/d1eafc7b9ac3

2019-09-30 23:44:06 1081

原创 如何生成以及静态库

https://www.jianshu.com/p/ac637f530145

2019-09-30 22:50:47 186

原创 生成以及链接动态库

https://www.jianshu.com/p/87c4f48c8ca2

2019-09-30 22:50:22 72

原创 shell脚本记录

https://www.jianshu.com/p/b275918bd414

2019-09-30 21:04:48 52

原创 交叉编译-如何编译Android平台的可执行程序

https://www.jianshu.com/p/e9f1e657e80a

2019-09-30 16:00:58 592

原创 编译Android平台可用的ffmpeg源码

https://www.jianshu.com/p/e9f1e657e80a

2019-09-30 10:18:13 69

原创 sqlite3源码编译以及c代码链接sqlite3库(无坑)

https://www.jianshu.com/p/10ef3e23a9f6

2019-09-30 09:42:23 774

原创 C++线程

https://www.jianshu.com/p/98ba4bddbfab

2019-09-25 19:28:10 55

原创 C++11类型推导

https://www.jianshu.com/p/9ee65a09ae95

2019-09-25 19:27:59 97

原创 Android类加载-PathClassLoader和DexClassLoader动态加载Jar包

https://www.jianshu.com/p/a350876a66e1

2019-09-25 19:27:49 487

原创 xShell连接阿里云服务器(无坑)

https://www.jianshu.com/p/145f275a94ea

2019-09-25 19:27:36 336

Android开发艺术探索源码和PDF

里面包含了Android开发艺术探索PDF和对应的源码,PDF是高清版的,都有对应的目录

2019-01-02

Android群英传源码

包含了Android群英传的源码,里面的源码和书中的章节都是一一对应的。

2019-01-02

ClassLoader动态加载dex

通过对ClassLoader中两个子类加载dex,来熟悉安卓中的apk加载流程

2018-12-17

android-app加固

app加固原理,通过加固app从而知道其中的原理,熟练掌握反编译

2018-12-17

空空如也

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

TA关注的人

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