- 博客(103)
- 资源 (4)
- 收藏
- 关注
原创 鸿蒙ms参考
Entry装饰的自定义组件可以作为页面的入口,在单个页面中最多可以使用@Entry装饰一个自定义组件,@Entry可以接受一个可选的LocalStorage的参数。1)@State:当被标记为@State的变量改变时会重新渲染View,它可以作为子组件单向或者双向同步的数据源,@State标记的变量必须初始化,不能为空值,@State支持Object,class,string,number,boolean,enum类型以及这些类型的数组,如果是嵌套类型或者数组中的对象的属性则无法触发刷新。
2024-09-19 11:10:31
1918
原创 属性动画源码分析-start方法
属性动画的启动我们是通过如下来完成的: objectAnimator.start();//动画开始时从start方法开始的start()核心代码如下:AnimationHandler.getInstance().autoCancelBasedOn(this);super.start();start()方法主要做了两件事,一个是检测如果动画已经执行,则停止动画;另一...
2020-02-23 17:17:45
392
原创 属性动画源码分析-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
1199
原创 属性动画核心API以及使用
属性动画的原理:初始化动画值,然后把该值设置到属性中,接着注册垂直同步信号,最后进行View重绘。这个过程是一直循环进行的。动画对值进行了修改,但是没有涉及到重绘,是因为垂直同步信号,在安卓中每隔16ms发送一次,对View进行了重新绘制测量和布局。API3.0之后提出的动画模式,优点如下不再局限于View对象,无对象也可以进行动画处理。不再局限于4种基本变换:平移,旋...
2020-02-23 15:49:00
278
原创 Dagger基础-@Subcomponent和@Name
需要用到的相关的类对象类:HttpObject,DatabaseObjectModule类:HttpModule,DatabaseModuleComponent(组件):DatabaseComponent,HttpComponentHttpObject.javapublic class HttpObject { public String baseUrl; ...
2019-10-23 14:15:37
399
原创 Dagger使用自定义Score和组件依赖
知识点:如何使用自定义Score使用自定义Score实现全局单例Component(组件)与Component(组件)之间如何进行依赖问题:为什么使用Score?使用@Singleton经常会报错,语法规则也很多,我们可以使用 @Score来解决这个问题,Score意为作用域。Component(组件)与Component(组件)之间为什么需要依赖?意味同一个...
2019-10-23 13:38:22
227
原创 注册机ModelLoader
Glide通过ModelLoader完成图片的加载过程封装。public interface ModelLoader<Model, Data> { interface ModelLoaderFactory<Model, Data> { ModelLoader<Model, Data> build(ModelLoader...
2019-10-22 17:03:54
236
原创 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
463
原创 Dagger局部单例和全局单例-@Singleton
提供一个HttpObject对象public class HttpObject {}提供一个Module@Singleton@Modulepublic class HttpModule{ @Singleton @Provides public HttpObject provederHttpObject(){ return new...
2019-10-22 14:19:09
922
原创 Dagger最基本的使用
记录此文,以此学习dagger任意对象都是可以注入的,dagger主要用于中大型项目。Dagger的作用:省去了new对象的过程,增加开发效率每个app中的Application管理整个app的全局类实例,所有的全局类实例都统一交给ApplicationComponent管理,并且它们的生命周期与app的生命周期一样。每个页面对应自己的Component,页面Compon...
2019-10-22 14:05:19
630
原创 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
491
原创 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
240
原创 MediaCodec编码音频
使用MediaCodec编码AAC对Android系统是有要求的,必须是4.1系统以上,即要求Android的版本代号在Jelly_Bean以上。MediaCodec是Android系统提供的硬件编码器,它可以利用设备的硬件来完成编码,从而大大提高编码的效率,还可以降低电量的使用,但是其在兼容性方面不如软件编码好,因为Android设备的碎片化太严重,可以自己衡量在应用中是否使用...
2019-10-13 18:54:56
2195
原创 MediaCodec编码视频
在Android 4.3系统之后,用MediaCodec编码视频成为了主流的使用场景,尽管Android的碎片化比较严重,会导致一些兼容性问题,但是硬件编码器的性能以及速度是非常可观的,并且在4.3系统之后可以通过Surface来配置编码器的输入,大大降低了显存到内存的交换过程所使用的时间,从而使得整个应用的体验得到大大提升。由于输入和输出已经确定,因此接下来将直接编写Media...
2019-10-13 18:45:50
849
原创 OpenGL中的纹理
OpenGL中的纹理可以用来表示图像、照片、视频画面等数据,在视频渲染中,只需要处理二维的纹理,每个二维纹理都由许多小的纹理元素组成,它们都是小块数据,类似于前面章节所说的像素点。要使用纹理,最常用的方式是直接从一个图像文件加载数据。为了访问到每一个纹理元素,每个二维纹理都有其自己的坐标空间,其范围是从左下角的(0,0)到右上角的(1,1)。按照惯例,一个维度称为S,而另一个则称为...
2019-10-12 10:54:18
616
原创 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
939
原创 如何在应用程序中使用Shader(着色器)
前面已经学习了GLSL的语法以及内嵌函数,并且也已经完成了一组Shader的实例,那么,如何让显卡来运行这一组Shader呢?或者说如何用Shader来替换掉OpenGL渲染管线中的那两个阶段呢?下面就来学习一下如何将Shader传递给OpenGL的渲染管线。先来看一下下图,该图描述了如何创建一个显卡的可执行程序,后文中将其统称为Program。首先来看图的右半部...
2019-10-12 09:44:59
528
原创 GLSL的语法以及内嵌函数
如何编写着色器小程序?需要用到一门新的语言,GLSL,它是类似C风格的语言。GLSL全称为OpenGL Shading Language,是为了实现着色器的功能而向开发人员提供的一种开发语言,对其只要能理解到这个层次就可以了。GLSL语法与内建函数修饰符float? 浮点型vec2? 含两个浮点型数据的向量...
2019-10-11 15:55:20
1320
原创 AudioTrack
由于AudioTrack是Android SDK层提供的最底层的音频播放API,因此只允许输入裸数据。和MediaPlayer相比,对于一个压缩的音频文件(比如MP3、AAC等文件),它需要自行实现解码操作和缓冲区控制。首先来看一下AudioTrack的工作流程,具体如下。1)根据音频参数信息,配置出一个AudioTrack的实例。2)调用play方法,将AudioTrack...
2019-10-11 10:46:15
513
原创 ffmpeg基础
解封装.pngffmpeg的功能主要有两方面:解封装解码FFmpeg核心模块libavutil 核心工具库,该模块是最基础的模块之一,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。libavformat用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 li...
2019-10-10 17:46:46
122
原创 交叉编译概念
先来看一下,如果要在PC上运行一个二进制程序(以源码的方式进行编译,不要以包管理工具的方式来安装),需要怎样做?首先,要有这个二进制程序的源代码(有可能是直接下载的,也有可能是自己编写的代码),然后在PC上进行编译链接生成可执行文件,最后在Terminal下面去执行该可执行文件。上述流程中包含了几个角色,首先是要有源代码,然后是要知道最终运行该二进制程序的机器是哪一个(其实就是...
2019-10-10 15:04:38
708
原创 视频基础
三色光等量的三原色光相加会变为白光,即白光中含有等量的红光(R)、绿光(G)、蓝光(B)。分辨率和像素点假设一部手机屏幕的分辨率是1280×720,说明水平方向有720个像素点,垂直方向有1280个像素点,所以整个手机屏幕就有1280×720个像素点(这也是分辨率的含义)。每个像素点都由三个子像素点组成,这些密密麻麻的子像素点在显微镜下可以看得一清二楚。图像的数值表示任何...
2019-10-09 22:39:41
287
原创 音频基础
数字音频数字音频的操作需要3个步骤:采样,量化,编码。采样:这个是指音频的。首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化。采样率一般是44.1kHz,而所谓的44.1kHz就是代表1秒会采样44100次量化:是指在幅度轴上对信号进行数字化,比如用16比特的二进制信号来表示声音的一个采样,而16比特(一个short)所表示的范围是[-32768,32767...
2019-10-09 22:39:37
137
原创 ffmpeg中的pts和dts
pts反映帧什么时候开始显示,dts反映数据流什么时候开始解码怎么理解这里的“什么时候”呢?如果有某一帧,假设它是第10秒开始显示。那么它的pts是多少呢。是10?还是10s?还是两者都不是。为了回答这个问题,先引入FFmpeg中时间基的概念,也就是time_base。它也是用来度量时间的。如果把1秒分为25等份,你可以理解就是一把尺,那么每一格表示的就是1/25秒。此时的t...
2019-10-09 11:51:14
1005
原创 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
188
原创 Android音视频
解码与编码解码(解压)与解封装:将一个音视频文件解封装,这个过程分别生成视频和音频,然后将视频解码成图像原始模型RGB,亮度模型YUV。音频解码成PCM。编码(压缩)与封装:将一段图像+一段声音编码(压缩)成编码后的音视频,然后封装成flv,mp4,avi等格式的文件。Android操作图像:Java SDK: SurfaceView,TextureViewNDK ...
2019-10-08 15:00:54
123
原创 AndroidStudio中使用CMake配置和build.gralde配置
https://www.jianshu.com/p/1684f5edb59b
2019-10-05 15:55:10
210
原创 Android类加载-PathClassLoader和DexClassLoader动态加载Jar包
https://www.jianshu.com/p/a350876a66e1
2019-09-25 19:27:49
528
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人