Android 笔记
文章平均质量分 60
Android 笔记
假装你是大灰狼
移动端工程师
展开
-
Android Retrofit2 详解和使用
Retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数、HeaderUrl等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit。转载 2024-01-13 13:19:24 · 953 阅读 · 0 评论 -
Android getLocalVisibleRect与 getGlobalVisibleRect方法
简单来说就是目标view在父view的映射,然后从屏幕左上角开始计算,保存到rect中,注意是父view,而不是屏幕,因为demo的父view)和屏幕宽高是一样的。只要这个View的左上角在屏幕中,它的的左上角坐标就一定是(0,0),如果View的右下角在屏幕中,它的右下角坐标就一定是(如果不在屏幕中,他的Rect数值就跟是一样的。转载 2023-11-20 16:02:58 · 862 阅读 · 0 评论 -
Android MediaStore的使用
上文中提到了Android提供内容的叫,那么在Android中怎么区分各个Provider?有的是提供联系人的,有的是提供图片的,有的是提供视频的等等。所以就需要有一个唯一的标识来标识这个ProviderUri(通用资源标识符)就是起到了这个标识的作用。每一个都会有一个唯一的Uri地址,通过这个Uri标识可以获取到和其中的数据,然后进行数据操作。使用的Uricontent://是通用前缀,表示该Uri用于定位资源。authority是授权者名称,用来确定具体由哪一个提供资源。因此一般authority。转载 2023-10-09 17:54:08 · 1648 阅读 · 0 评论 -
Android 视频编辑解析库MP4Parser
在 GitHub 上找到这个库后从README开始。官方写到大概意思就是:读,写和创建MP4容器,操作容器不同于编码和解码。并不知道什么意思,继续往下。之后给出了混合音频和视频的操作方式;依赖库中支持的几种格式;一种特殊问题,音视频播放不同步的解决方案;明确强调和是不能进行拼接合并操作的。简单小结:使用此库可以实现多个音频视频的追加合并,将视频的音频和视频进行分离替换等,同时还支持了字幕的添加,使用时候需要注意音视频格式。转载 2023-09-06 13:00:40 · 685 阅读 · 0 评论 -
Android MediaRecorder录音
最近在项目中实现录音功能,并在逻辑中还有对录音文件的特殊要求,前前后后看了很多资料,学习了很多,今天在这里分享记录一下,以便后期回看。和。:录制的音频文件是经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。已经集成了录音、编码、压缩等,并支持少量的录音音频格式,但是这也是他的缺点,支持的格式过少并且无法实时处理音频数据。:主要实现对音频实时处理以及边录边播功能,相对。原创 2023-09-06 11:26:30 · 715 阅读 · 0 评论 -
Android APP界面黑白化处理
的属性更改界面背景颜色,通过设置颜色过滤器更改画笔的色调、饱和度和亮度。考虑性能使用HardwareLayer(GPU内部的Buffer)对绘制的图形进行缓存。设置置灰,实现全局置灰效果。创建自己对应的层,并将自己绘制到层上。Android页面绘制流程一般分为。Android页面置灰。转载 2023-05-16 17:23:43 · 500 阅读 · 0 评论 -
Android 播放视频之ExoPlayer
在中,我们了解了系统自带的VideoView来播放视频,但其支持的视频格式偏少,我们需要其他的视频播放器。ExoPlayer是Google的开源的应用级媒体播放器项目,支持多种视频格式和流媒体播放,。原创 2023-05-08 11:01:16 · 4447 阅读 · 1 评论 -
Android PickerView简单应用
这是一款仿iOS的PickerView控件,有时间选择器和选项选择器。添加依赖项。原创 2023-05-15 18:14:25 · 2978 阅读 · 0 评论 -
Android 播放视频之VideoView
VideoView继承,并且实现了接口,相当于的组合。关于可参考。在布局文件里添加VideoView在Activity里面播放视频。原创 2023-05-04 16:42:32 · 3471 阅读 · 0 评论 -
Android Gradle学习(八) 统计Task执行时长
关于 Gradle 的基本知识,前面章节已经讲的差不多了。那么,我们现在来牛刀小试一下,看看 Gradle 有什么用武之地。我们在将 Android 应用程序打包成 apk 包时,有时会发现整个 build 过程特别长,短则 1、2 分钟,长则大几分钟甚至更长,特别是你要进行调试时,漫长的等待会让人很焦躁。我们在控制台可以看到整个打包过程包含很多个 task ,那么到底是哪些 task 的执行花...转载 2019-11-27 17:53:10 · 1323 阅读 · 2 评论 -
Android Gradle学习(七) Gradle构建生命周期
Gradle 进行构建,都要经过3个生命周期阶段:初始化阶段配置阶段执行阶段Gradle 提供了很多生命周期监听方法,可以在各个阶段 Hook 指定的任务。1. ProjectProject 提供的生命周期回调方法有://在 Project 进行配置前调用void beforeEvaluate(Closure closure)//在 Project 配置结束后调用void ...转载 2019-11-27 17:43:19 · 1279 阅读 · 0 评论 -
Android Gradle学习(六) NamedDomainObjectContainer详解
第一次看到 NamedDomainObjectContainer 的时候,让我迷惑了好一阵子,这到底是个什么玩意?现在让我们来揭开它神秘的面纱,看看它到底是什么,有什么作用。1. NamedDomainObjectContainer的使用场景前面在讲解 Gradle Extension 的时候,说到名为 android 的 Extension 是由 BaseExtension 这个类来实现的,...转载 2019-11-27 17:08:06 · 2201 阅读 · 0 评论 -
Android Gradle学习(五) Extension详解
前面我们已经详细讲解了 Gradle 的 Task、Project 等基本用法,现在我们还要学习一个很重要的概念 Extension,它在 Gradle 中几乎随处可见,特别是在 Android 打包配置中。1. 什么是Extension我们先来看一段 Android 应用的 Gradle 配置代码:android { compileSdkVersion 26 default...转载 2019-11-27 17:03:14 · 2873 阅读 · 0 评论 -
Android Gradle学习(四) Project详解
每一个 build.gradle 脚本文件被 Gradle 加载解析后,都会对应生成一个 Project 对象,在脚本中的配置方法其实都对应着 Project 中的API,如果想详细了解这些脚本的配置含义,有必要对 Project 类做些深入的剖析。1. Project类图当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project类,先...转载 2019-11-27 16:21:03 · 2462 阅读 · 0 评论 -
Android Gradle学习(三) Task进阶学习
前面通过很多范例讲了在 build.gradle 中怎么创建 Task,但是 Task 到底是个什么东西,它里面有些什么,我们并不清楚,本文试图揭开 Task 神秘的面纱。1. Task类图Gradle 所说的 Task 是 org.gradle.api.Task 接口,默认实现是 org.gradle.api.DefaultTask 类,其类图大概如下(只节选了比较重要的部分):我们只需...转载 2019-11-27 11:10:05 · 1744 阅读 · 0 评论 -
Android Gradle学习(二) 如何创建Task
一个 Task 是 Gradle 里项目构建的原子执行单元,Gradle 通过将一个个Task串联起来完成具体的构建任务,每个 Task 都属于一个 Project。关于 Task 的具体定义可查看官方文档Gradle Task API。1. 在Gradle里定义Task在 build.gradle 里可以通过 task 关键字来创建Task:task myTasktask myTask ...转载 2019-11-26 18:05:07 · 1728 阅读 · 0 评论 -
Android Gradle学习(一) Gradle基础入门
现在的Android应用都是采用Android Studio来开发的,AS默认是采用Gradle作为构建工具的。通常开发者可以不需要理解任何Gradle的脚本配置,就可以开发出一个APP。但是,当你想做一些更智能的操作时,比如修改打包后的输出目录、提高打包速度等等,就必须对Gradle有比较深入的了解。Gradle脚本是基于Groovy语言来编译执行的,在这之前最好要对Groovy语言有所了解。...转载 2019-11-26 18:02:35 · 953 阅读 · 0 评论 -
Android Groovy 动态(十三)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. 动态访问访问属性class AGroovyClass { int value = 10}obj = new AGroovyClass()pName = "value"println obj["value"] // 10println obj.value // 10pr...原创 2019-10-11 16:29:45 · 291 阅读 · 0 评论 -
Android Groovy 注入(十二)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. 分类注入use()方法注入Groovy使用use()来注入方法,但该方法必须是静态的,并且第一个参数必须是目标对象。 class IntegerUtil { // 如果想要限制为Integer类型,可以使用isEven(Integer self) def stat...原创 2019-10-10 14:50:20 · 583 阅读 · 0 评论 -
Android Groovy 对象和方法拦截(十一)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. Groovy对象在一个Groovy应用中,使用三类对象,POJO(普通Java对象)、POGO(Groovy对象,实现GroovyObject接口)和Groovy拦截器(实现GroovyInterceptable)。GroovyObject接口package groovy.lang;p...原创 2019-10-09 17:58:59 · 457 阅读 · 0 评论 -
Android Groovy 调用(十)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. Groovy调用脚本groovy脚本文件hello.groovy。println "Hello World!" // Hello World!输入groovy hello.groovy可以调用该脚本也可像java一样先进行编译,生产hello.class文件。groovyc hello....原创 2019-10-09 08:59:11 · 611 阅读 · 0 评论 -
Android Groovy Json解析和构建(九)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. JsonBuilder构建people = new Expando(name:"Jack", addr:"ShangHai")people.phone = [131111111, 132111111] // Listpeople.expr = [java:2, groovy:1] // Map...原创 2019-10-09 08:52:58 · 801 阅读 · 0 评论 -
Android Groovy XML解析和构建(八)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. XmlParser解析XML可以解析xml文件,也可以解析字符串。 def persons = new XmlParser().parse("persons.xml")或者 xmlStr = """ <persons> <person name="...原创 2019-10-08 13:38:32 · 670 阅读 · 0 评论 -
Android Groovy 线程(七)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. Start方法Groovy中,调用Thread的静态方法start()来创建线程。def printThreadInfo() { Thread currentThread = Thread.currentThread() println "Current Thread is ${...原创 2019-10-08 13:37:19 · 1084 阅读 · 0 评论 -
Android Groovy 闭包(六)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。闭包是Groovy的特性之一,类似于Java中的匿名内部类,但功能更加强大。1. 闭包应用一般用法 def filter(array, block) { for (val in array) { block(val) } } iarray ...原创 2019-10-08 10:19:47 · 543 阅读 · 0 评论 -
Android Groovy 集合(五)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. 动态类型Groovy方法属于动态类型,只有在调用时才会检查。可以调用respondsTo()方法来检查是否存在该方法。class Rectangle { void draw() { println "Rectangel draw" }}class Circl...原创 2019-09-30 23:13:34 · 270 阅读 · 0 评论 -
Android Groovy 字符串(四)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. for-each循环。使用冒号形式的for循环,必须指定name的类型。 names = ["Michael", "James", "Kavin", "Steven"] for (String name : names) { println name }返回 M...原创 2019-09-30 23:12:02 · 331 阅读 · 0 评论 -
Android Groovy 属性和方法(三)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. Groovy属性Groovy中声明了一个属性,系统会自动生成get和set方法。class Car { def speed = 10}Car car = new Car()println car.speed // 10println car.getSpeed() // 10...原创 2019-09-30 16:47:13 · 722 阅读 · 0 评论 -
Android Groovy 特殊语法(二)
首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。1. 多赋值Groovy可以返回一个数组,然后赋值给左侧表达式。左侧表达式必须以逗号分隔,放在圆括号中。 def splitName(fullname) { fullname.split(',') } (firstName, lastName) = splitName("Mi...原创 2019-09-30 16:46:01 · 533 阅读 · 0 评论 -
Android Groovy 安装环境(一)
1. Java安装下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html设置环境变量 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_25 CLASSPATH=.:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.ja...原创 2019-09-30 16:42:28 · 567 阅读 · 0 评论 -
Android Kotlin 基础(一)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。1. 定义变量和方法定义变量定义变量必须以var开头,定义常量以val开头数据类型在变量后面,并且用冒号(:)分隔定义变量时如果未初始化,必须指定数据类型。如果进行了初始化,可以不指定数据类型,编译器会自动推导数据类型不需要以分号(;)结尾示例var a1: Intvar a2...原创 2020-01-20 16:25:13 · 599 阅读 · 0 评论 -
Android Kotlin 关键字 Reified
reified:使抽象的东西更加具体或真实,非常推荐 Android 开发使用这个关键字。本文介绍 3 点特别的使用方式如下:1. 不再需要传参数 clazz大部分的文章讲解 reified 的使用,都有提到这个点,比如我们定义实现一个扩展函数启动 Activity,一般都需要传 Class<T> 参数:// Functionprivate fun <T : Activity> Activity.startActivity(context: Context, clazz: C转载 2021-03-01 14:20:37 · 1324 阅读 · 0 评论 -
Android Kotlin null值安全性
Kotlin 类型系统的设计目标就是希望消除代码中null引用带来的危险。Kotlin 的类型系统致力于从我们的代码中消除NullPointerException. 只有以下情况可能导致NPE:明确调用 throw NullPointerException()使用 !! 操作符, 详情见后文外部的 Java 代码导致这个异常初始化过程中存在某些数据不一致 (在构造器中使用了未初始化的 this)在 Kotlin 中, 类型系统明确区分可以指向null的引用 (可为null引用) 与不可以指向转载 2020-08-24 10:25:06 · 499 阅读 · 0 评论 -
Android Kotlin 运算符重载(八)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。Kotlin允许我们对数据类型的一组预定义的操作符提供实现函数。1. 一元操作符重载表达式对应的函数+aa.unaryPlus()-aa.unaryMinus()!aa.not()a++a.inc()a–a.dec()我们假设一个复数类Complex,有实部real和虚部imagclass Complex(r: Int, i: Int) {原创 2020-08-21 14:46:32 · 492 阅读 · 0 评论 -
Android Kotlin Lambda表达式(七)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。Lambda表达式,也可称为匿名函数。以箭头操作符->将表达式拆分成两部分// 没有参数var f1 = { -> println("in f1")}// 一个参数var f2 = { x: Int -> println("in f2 x = $x")}// 多个参...原创 2020-04-15 17:47:47 · 257 阅读 · 0 评论 -
Android Kotlin 扩展和委托(六)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。1. 扩展1.1 类成员扩展扩展可以向类中添加成员。为Long添加一个format方法,用于时间戳格式化输出。fun Long.format(): String { return SimpleDateFormat("yyyy-MM-dd hh:mm:ss") ...原创 2020-04-03 17:03:05 · 289 阅读 · 0 评论 -
Android Kotlin 对象(五)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。在Java中,有一个匿名类的概念,在Kotlin中,也有类似的功能,就是对象。1. 对象建立一个对象,需要使用object关键字,该对象要继承的类需要与object之间用冒号(:)分隔。open class Operation(var base : Int) { open fun ...原创 2020-03-11 16:14:05 · 493 阅读 · 0 评论 -
Android Kotlin 泛型(四)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。1. 泛型所谓泛型,就是指在定义数据结构时,只指定类型的占位符,待到使用该数据结构时再指定具体的数据类型。定义泛型类型变量,可以完整地写明类型参数,如果编译器可以自动推定类型参数,也可以省略类型参数。class Data<T>(v: T) { var value = v...原创 2020-02-26 20:17:28 · 823 阅读 · 0 评论 -
Android Kotlin 枚举类、数据类和封闭类(三)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。1. 枚举类在kotlin中,枚举以类的形式存在。枚举有name和ordinal属性,用于获取枚举值名称和索引。通过valueOf()方法传入枚举值名称获取对应的数值。enum class Direction { EAST, SOUTH, WEST, NORTH}fun main...原创 2020-02-11 20:37:32 · 912 阅读 · 0 评论 -
Android Kotlin 类和接口(二)
首先申明下,本文为笔者学习《Kotlin 程序开发入门精要》的笔记,并加入笔者自己的理解和归纳总结。1. 类在kotlin中,类的声明使用class关键字。class Shape {}1.1 构造器类允许定义一个主构造器和若干个第二构造。主构造器是类头的一部分,紧跟在类名的后面,构造器参数是可选的。在init块中进行初始化,init块可直接使用主构造器的参数。class Shap...原创 2020-01-21 13:55:13 · 729 阅读 · 0 评论