原文: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. CSS背景设置与Emmet语法

    CSS背景设置 通过CSS背景属性,可以给页面元素添加背景样式,页面元素指任意标签. 背景属性可以设置背景颜色,背景图片,背景平铺,背景图片位置,背景图像固定等.   背景颜色 一般默认值是:tran ...

  2. Linux-expect(以交互形式输入命令,实现交互通信)

    1.expect简介 expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. 安装命令: yum install ex ...

  3. Java-将文本(字符串)转化成二进制字符

    今天在测试MySQL的Blob相关类型时,这种一般存放的是二进制文本,所以就想插入二进制文本. package com.aaa.dao; public class aaa { public stati ...

  4. Hive实战

    1.使用hive实现WordCount (1) 创建数据库 create database wordcount; (2) 创建外部表 create external table word_data(l ...

  5. NC24623 Tree Decoration

    题目链接 题目 题目描述 Farmer John is decorating his Spring Equinox Tree (like a Christmas tree but popular ab ...

  6. oracle中使用自定义函数解析指定分隔符的字符串

    1.创建字符串表类型 create type tab_varchar is table of varchar2(2000); 2.创建管道函数 create or replace function g ...

  7. 前端树形Tree数据结构使用-🤸🏻‍♂️各种姿势总结

    01.树形结构数据 前端开发中会经常用到树形结构数据,如多级菜单.商品的多级分类等.数据库的设计和存储都是扁平结构,就会用到各种Tree树结构的转换操作,本文就尝试全面总结一下. 如下示例数据,关键字 ...

  8. 统信UOS系统开发笔记(二):国产统信UOS系统搭建Qt开发环境安装Qt5.12

    前言   开发国产应用,使用到统信UOS系统,安装Qt5.12.8的Qt开发安装包直接安装(这是本篇使用的方式,另外一种源码编译安装将在下一篇讲解)   统信UOS系统版本   系统版本:     Q ...

  9. java学生管理系统(界面版)

    运行截图 项目说明: 本系统界面我个人就从简设计了,本来打算使用windowbuilder插件设计的,可想到使用windowbuilder插件之后导致代码冗余,会影响到代码可读性,可能对小白不友好.虽 ...

  10. 在Vue中使用Canvas绘制背景

    好家伙, 在vue中使用canvas绘制与在html中使用canvas绘制大致相同, 但又有所区别  法一(无图片资源): vue中canvas的使用 - 掘金 (juejin.cn) 找到canca ...