原文:Android自定义View学习(1)——基础知识介绍 - Stars-One的杂货小窝

准备学习自定义View,介绍一下先了解了下相关的前置基础知识,特此总结

本系列集合文章链接可访问Android自定义View学习系列教程

坐标系

屏幕坐标系

不管是Android设备,还是PC设备,屏幕坐标原点都是在左上角

只需要记住一点:屏幕的y坐标与数学中的坐标系相反的!

View的坐标

getTop();       //获取子View左上角距父View顶部的距离
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离

图例:

事件中的触摸点坐标

Android自定义View中,肯定会涉及到关于事件,一般Android使用MotionEvent类来装载定义的触摸点坐标

event.getX();       //触摸点相对于其所在组件坐标系的坐标
event.getY(); event.getRawX(); //触摸点相对于屏幕默认坐标系的坐标
event.getRawY();

图例:

颜色

颜色常用RGB,需要透明度的则是ARGB格式

A:从0x00到0xff表示从透明到不透明。

RGB:从0x00到0xff表示颜色从浅到深。

当RGB全取最小值(0或0x000000)时颜色为黑色,全取最大值(255或0xffffff)时颜色为白色

透明色

关于透明色的设置,Android和前端Css有所区别 Android这边是前两位,而Css中是后两位

Android设置颜色透明度,范围大小为00-FF,如FF代表设置不透明度为100%

css中,后两位设置颜色透明度,范围也是00-FF

不透度对应16进制大全(0-100)
不透明度 16进制
0% 00
1% 03
2% 05
3% 08
4% 0A
5% 0D
6% 0F
7% 12
8% 14
9% 17
10% 1A
11% 1C
12% 1F
13% 21
14% 24
15% 26
16% 29
17% 2B
18% 2E
19% 30
20% 33
21% 36
22% 38
23% 3B
24% 3D
25% 40
26% 42
27% 45
28% 47
29% 4A
30% 4D
31% 4F
32% 52
33% 54
34% 57
35% 59
36% 5C
37% 5E
38% 61
39% 63
40% 66
41% 69
42% 6B
43% 6E
44% 70
45% 73
46% 75
47% 78
48% 7A
49% 7D
50% 80
51% 82
52% 85
53% 87
54% 8A
55% 8C
56% 8F
57% 91
58% 94
59% 96
60% 99
61% 9C
62% 9E
63% A1
64% A3
65% A6
66% A8
67% AB
68% AD
69% B0
70% B3
71% B5
72% B8
73% BA
74% BD
75% BF
76% C2
77% C4
78% C7
79% C9
80% CC
81% CF
82% D1
83% D4
84% D6
85% D9
86% DB
87% DE
88% E0
89% E3
90% E6
91% E8
92% EB
93% ED
94% F0
95% F2
96% F5
97% F7
98% FA
99% FC
100% FF

颜色定义

1.通过Color类

int color = Color.GRAY;     //灰色
int color = Color.argb(127, 255, 0, 0); //半透明红色

2.直接定义16进制数值

//相当于#aaff0000
int color = 0xaaff0000; //带有透明度的红色

3.在xml文件中定义颜色

这种相信各位经常用,方便管理

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
</resources>

补充#定义颜色:

#f00            //低精度 - 不带透明通道红色
#af00 //低精度 - 带透明通道红色 #ff0000 //高精度 - 不带透明通道红色
#aaff0000 //高精度 - 带透明通道红色

在Java中引用:

int color = getResources().getColor(R.color.mycolor);

注:getResources()方法是由Activity提供

在xml中引用

android:background="@color/red"

图像叠加

通过前面介绍我们知道颜色一般都是四个通道(ARGB)的,其中(RGB)控制的是颜色,而A(Alpha)控制的是透明度。

因为我们的显示屏是没法透明的,因此最终显示在屏幕上的颜色里可以认为没有Alpha通道。Alpha通道主要在两个图像混合的时候生效。

实际上,上述我们所说的透明效果,其实是通过图像叠加原理来实现

图像叠加有多种不同的模式,我们可以使用其他效果,比如说常见的橡皮檫功能

其实还可以有不同的混合模式供我们选择,可以使用用Paint.setXfermode(),指定不同的PorterDuff.Mode

Paint paint =  new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));//设置xfermode

xfermode模式图解:

角度与弧度

单位换算:

在常见的数学坐标系中角度增大方向为逆时针,

在默认的屏幕坐标系中角度增大方向为顺时针。

参考

Android自定义View学习(1)——基础知识介绍的更多相关文章

  1. android 自定义view 前的基础知识

    本篇文章是自己自学自定义view前的准备,具体参考资料来自 Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了 ...

  2. 简单说说Android自定义view学习推荐的方式

    这几天比较受关注,挺开心的,嘿嘿. 这里给大家总结一下学习自定义view的一些技巧.  以后写自定义view可能不会写博客了,但是可以开源的我会把源码丢到github上我的地址:https://git ...

  3. Android自定义View学习笔记(一)

    绘制基础 参考:HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础 Paint详解 参考:HenCoder Android 开发进阶: 自定义 View 1-2 Pain ...

  4. Android自定义View学习(四)

    硬件加速 参考:HenCoder Android 自定义 View 1-8 硬件加速 硬件加速能够让绘制变快,主要有三个原因: 本来由 CPU 自己来做的事,分摊给了 GPU 一部分,自然可以提高效率 ...

  5. Android自定义View学习(二)

    绘制顺序 参考:HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序 绘制过程 包括 背景 主体(onDraw()) 子 View(dispatchDraw()) 滑动边缘渐 ...

  6. Android自定义View学习(三)

    属性动画(上) 参考:HenCoder 自定义绘制的第 1-6 期:属性动画 Property Animation(上手篇) Interpolator 其实就是速度设置器,设置动画运行的速度. 属性动 ...

  7. Android 自定义 View 圆形进度条总结

    Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

  8. 【朝花夕拾】Android自定义View篇之(四)自定义View的三种实现方式及自定义属性使用介绍

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10979161.html],谢谢! 尽管Android系统提供了不少控件,但是有很多酷炫效果仍然 ...

  9. Android之自定义View学习(一)

    Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...

  10. Android自定义View(CustomCalendar-定制日历控件)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/54020386 本文出自:[openXu的博客] 目录: 1分析 2自定义属性 3onMeas ...

随机推荐

  1. 分布式缓存-Redis集群

    一.单点Redis弊端 1.数据丢失问题:Redis是内存存储,服务器重启可能会丢失数据 2.并发能力问题:单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景 3.故障恢复问题:如 ...

  2. 外部文件使用django的models

    #外部文件使用django的models,需要配置django环境 import os if __name__ == '__main__': os.environ.setdefault("D ...

  3. java线程池实现多任务并发执行

    Java线程池实现多任务并发执行 1️⃣ 创建一些任务来落地多任务并发执行 每一个数组里面的数据可以看成任务,或者是需要并发的业务接口, 数组与数组之间,可以看作为他们之间有血缘关系,简单来说就是: ...

  4. 使用easyexcel导入62个字段,十万加行数的excel

    使用easyexcel导入62个字段,十万加行数的excel 1️⃣ 准备工作 1. 版本对应 在easyexcel官网的常见问题栏中往下滑找到 2. 下载jar包 maven项目不想多说,在pom. ...

  5. P9933 [NFLSPC #6] 9.pop_book(); 题解

    题目链接: P9933 [NFLSPC #6] 9.pop_book(); 先考虑一个最基本的式子: \(x=v \times t\),很显然的一点是,除了 Alek岁,每个人的运动路程函数写出来都是 ...

  6. 零基础入门学习Java课堂笔记 ——day01

    Java语法 1.注释.标识符.关键字 注释 不会被程序执行的代码或者块 //双斜杠表示单行注释 /*表示多行注释*/ 标识符.关键字 关键词系统事先定义好的,我们能直接拿来用的,不能作为变量名使用 ...

  7. 蓝鲸单机离线部署:app_mgr组件安装失败解决

    之前在腾讯蓝鲸智云-单机离线部署测试中,遇到了几个安装问题,本文记录下3.2 app_mgr组件安装失败 的解决过程,因为这个问题卡了很久(可能也是因为笔者对python相关知识和蓝鲸产品不够熟悉), ...

  8. HBase-hbase shell操作

    hbase shell操作 一.DDL操作 1.开启hbase shell hbase shell 2.查看hbase状态 Status 3.查看hbase版本 Version 4.创建命名空间 cr ...

  9. Java-生成字符串的MD5值

    方法一:public static String getMd5(String str) { MessageDigest md5 = null; try { md5 = MessageDigest.ge ...

  10. display的值及作用

    display的值及作用 display属性可以设置元素的内部和外部显示类型,元素的外部显示类型将决定该元素在流式布局中的表现,例如块级或内联元素,元素的内部显示类型可以控制其子元素的布局,例如gri ...