自定义View(二)—— 颜色基础
自定义View(二)—— 颜色基础
¶1. 颜色类型
在进行自定义View的时候,熟悉Android中的颜色相关的概念,能够帮助我们快速配置UI,也有更多与设计师battle的资本
颜色模式
备注
ARGB8888
四通道高精度(32位)
ARGB4444
四通道低精度(16位)
RGB565
屏幕默认模式(16位)
Alpha8
仅有透明通道(8位)
字母(比如A、R、G、B)表示颜色通道,而数字(比如8、8、8、8)这些对应的是每个通道的位数
举个例子,ARGB8888这种颜色模式,其中ARGB代表四个通道,首先是我们比较熟悉的RGB,代表红、绿、蓝三种颜色通道,另外又加上Alpha通道,用以调节透明度,后面的4个8其实就是代表这里的4个通道都是使用8个二进制位进行表示的,每个的范围是0~255
通道
解释
0(0x00)
255(0xff)
A(Alpha)
透明度
透明
不透明
R(Red)
红色
无色
红色
G(Green)
绿色
无色
绿色
B(Blue)
蓝色
无色
蓝色
ARGB4444和ARGB8888是 ...
自定义View(一)—— 坐标系
自定义View(一)—— 坐标系
¶1. 坐标系
¶1.1. 数学的坐标系和屏幕坐标系
在数学当中,我们常见的坐标系是如上图这样,x轴和y轴分别自左至右和自下而上延伸,角度是以逆时针方向为正
但是Android的屏幕和这会有一些区别
在Android设备的屏幕上,x轴和y轴是分别向右和向下的,设备屏幕的左上角是坐标系的坐标原点,角度以顺时针旋转方向为正
¶1.2. View的坐标系
View的坐标系是相对于它的父级而言的
top、bottom、left、right分别是与View的位置表示相关的概念,描述的是其在父级中的相对位置
The geometry of a view is that of a rectangle. A view has a location, expressed as a pair of left and top coordinates, and two dimensions, expressed as a width and a height. The unit for location and dimensions is the pixel. ...
React新起点(一)
React新起点(一)
¶1. 简介
React是一个JavaScript库,用于构建交互式网站,并且能够快捷创建SPA(Single Page App)
¶2. 起步
使用命令创建项目
1npx create-react-app little-blog
在项目目录中找到package.json文件,使用其中的start脚本进行预览
在终端中输入npm run start之执行该脚本
node_moudles/目录下的内容通常是项目所需的依赖,如果clone的项目中没有,可以通过运行npm install,使系统根据项目当中的package.json文件下载
¶3. React 组件
123456const root = ReactDOM.createRoot(document.getElementById('root'));root.render( <React.StrictMode> <App /> </React.StrictMode>);
目前在index.js当中只有App这个组件
12345678910 ...
Linux C 编程(一)
Linux C 编程(一)
¶1. 程序基础
¶1.1. 基本概念
计算机是由数字电路组成的运算机器,只能对数字进行运算,而其能够进行符号运算的原因,是因为符号在计算机内部也是用数字表示的
程序
用来告诉计算机应该如何完成一个计算任务(简言之,就是先做什么,再做什么)
指令
程序由一系列指令组成,指令是指示计算机进行某种运算的命令
语句
计算机指令的抽象表示(比如C、Java这种高级语言,不是使用的助记符或是机器码指令,而是封装成了更加易用的逻辑)
编写程序
编写程序的过程是将复杂的任务分解成子任务,再把子任务进一步分解,不断反复这样的分解,直到简单得可以使用指令完成
¶1.2. 程序调试
程序的编写是一个复杂的过程,其中时常陪伴着程序员的还有寻找 Bug 的过程,因为程序毕竟是人写的,人总会犯错,因此就需要我们查找并修改这些程序中的错误,也就是所谓 Bug
找到程序当中的这些 Bug 并且纠正的过程便是调试(Debug)
¶Bug的分类
编译时错误
编译器只能翻译语法正确的程序,如果语法存在错误,编译器就会罢工,此时你需要根据编译器提供的线索,找到问题并加以改正
运行时错误
...
JNI 学习笔记(一)
JNI 学习笔记(一)
JNI层面的知识是Android进阶必备的知识之一,下面我们就来看一下这里面都有些什么吧
¶1. 简介
JNI (Java Native Interface),简单翻译就是Java本地接口,作为程序员,对于接口还是比较敏感的,这可能代表会有一些功能提供给我们调用,至少大概的印象是这样的
根据官方给出的解释,JNI 算得上是一种编程框架,能够使得JVM去调用本地的应用或者库,或者被其他程序调用,其中,这些本地代码通过其他语言书写,最常见的是C/C++
至此,我们可以大概梳理一下 JNI 在我们脑海里模糊的影像
似乎就像是一个桥梁,建立了 Java 代码(或者说是 JVM )与本地应用程序(或者通俗些,C/C++ 代码)之间的联系,你可以调我,反过来,我也可以调你
¶2. JNI 的用途
简单了解了 JNI 是什么之后,我们又不禁想要知道为什么我们需要 JNI ? 技术的产生总是带有目的性的,那么,JNI 是用于解决什么问题的呢?
操作硬件相关内容(操作系统API往往基于C/C++)
提升处理性能(音视频、渲染、大量计算操作等)
提升安全性(Java的字节码文件 ...
Rust 探索(九)—— 枚举与模式匹配(下)
Rust 探索(九)—— 枚举与模式匹配(下)
¶1. 绑定值的模式
匹配分支还可以用来绑定值,这是什么意思呢?
1234567// 垃圾enum Waste { Recyclable, // 可回收垃圾 Other, // 其他垃圾 Kitchen(Content), // 厨余垃圾,添加细分 Hazardous // 有害垃圾}
123456#[derive(Debug)]enum Content { Peel, // 果皮 Leftovers, // 剩饭 Bone // 骨头}
这里我们对于厨余垃圾类型进行了进一步描述,正如我们先前所了解到的,枚举类型可以添加参数,因此这里又添加了一个Content枚举,用以将厨余垃圾细分为果皮、剩饭和骨头
上面添加#[derive(Debug)],因为稍后会将其进行输出
1234567891011121314fn classify(waste: Waste) -> String { match waste { ...
机器学习笔记(一)
机器学习笔记(一)
在油管看了 Andrew Ng 的课,发现真正的专家就是能够将晦涩难懂的知识结合生活的趣事讲得有滋有味,丝毫没有平时听课的那种困乏感,因此有点像追剧一样一连看了好几节,口齿清楚,节奏也把握得当,尽管一节只几分钟,但确实是将知识点讲清楚了,干货满满,在此整理了一些我个人学习的笔记和思考
¶1. 什么是机器学习
两种主要的机器学习:
监督学习(supervised learning)
无监督学习(unsupervised learning)
监督学习在现实中的应用很广泛
增强学习(reinforcement learning):另一种机器学习算法
了解如何运用工具才是最重要的
¶2. 监督学习
x -> y
input -> output label
从给定的正确答案中学习(即给定x的正确标签y)
算法通过对于正确的x、y搭配学习,最终在只输入x的时候,对于输出y进行预测
Input(X)
Outout(Y)
Application
email
spam?(0/1)
垃圾邮件过滤器
audio
text transcripts
语音 ...
Rust 探索(八)—— 枚举与模式匹配(上)
Rust 探索(八)—— 枚举与模式匹配(上)
¶1. 枚举类型
枚举类型的特点就是列举所有可能的值来定义一个类型
就比方说交通信号灯的颜色,总共有红、黄、绿3种可能,那么作为灯的颜色这个类型,有3个枚举变体,分别是RED(红)、YELLOW(黄)、GREEN(绿)
¶2. 定义枚举
使用enum关键字定义枚举类型
12345enum Signal { // 使用enum定义枚举 RED, YELLOW, GREEN}
如上所示,Signal就是枚举类的名称,对比着结构体的内容来看,RED、YELLOW、GREEN是3个成员,不过在枚举中,它们称为变体
另外,这三个变体同属于Signal这一个类型,红、黄、绿都是灯的颜色,只不过呈现的形式不同
¶3. 枚举值
12let green = Signal::GREEN;let red = Signal::RED;
枚举类和变体之间使用::分隔,这里的green和red相当于是对应枚举变体的实例了
注意,这两个变量对应的是同一类型,正如Rust编译器所推导的一样
因此,如果需要定义函数处理它们,只 ...
Rust 探索(一)—— 准备
Rust 探索(一)—— 准备
¶1. 环境配置
入门 - Rust 程序设计语言 (rust-lang.org)
首先,需要到Rust的官网上下载Rust语言对应的安装包,点击“马上开始”,跳转到新的页面
这个页面介绍道通过Rustup这个工具对于Rust进行安装和管理,并且判断出我当前使用的操作系统是Windows,给出了对应的安装器,这里我选择与我自己系统相匹配的64位的.exe
下载完rustup-init.exe之后,然后执行,会跳出这样一个页面,这里我选择默认的安装,就输入“1”
如果网络情况Ok的话,很快就可以下载完毕,可以看到里面强调Cargo,这是一个重要的工具,之后会经常用到
为了验证一下Rust是否已经被正确地安装并且添加到环境变量当中,在cmd控制台输入rustc --vertsion获取一下版本号
1> rustc --vertsion
如果一切成功就会显示如下格式的版本号,后面附有版本哈希值以及版本提交日期
¶2. 创建项目
在完成Rust的安装之后,开始创建第一个Rust项目
编写Rust项目可以选择自己趁手的工具,像VS Code或 ...
Rust 探索(七)—— 使用结构体来组织关联的数据
Rust 探索(七)—— 使用结构体来组织关联的数据
¶1. 定义并实例化结构体
Rust当中的结构体是一种自定义的数据类型,可以将多个值打包在一起,组成一个整体,听起来和面向对象编程语言当中类的概念似乎差不多
结构体的成员也是可以有不同的类型,并且其成员有对应的名称,相较于元组,它们更加灵活
使用struct关键字可以定义结构体
123456struct UserInfo { username: String, password: String, gender: bool, balance: f64}
这就是一个UserInfo结构体,其中有4个字段,这些字段都是有对应名称的,有特定的含义,与平常所见的其他语言的类的定义十分相似
123456let user = UserInfo { username: String::from("杰洛特"), password: String::from("123456"), gender: true, ...