Android自定义View基础篇

Android中的坐标系

  1. 屏幕坐标系
    移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向
  1. View的坐标系
    View的坐标系统是相对于父控件而言的。
  getTop();       //获取子View左上角距父View顶部的距离
  getLeft();      //获取子View左上角距父View左侧的距离
  getBottom();    //获取子View右下角距父View顶部的距离
  getRight();     //获取子View右下角距父View左侧的距离
  1. MotionEvent中 get 和 getRaw 的区别
    event.getX();       //触摸点相对于其所在组件坐标系的坐标
    event.getY();
    event.getRawX();    //触摸点相对于屏幕默认坐标系的坐标
    event.getRawY();

角度与弧度

在我们自定义View,尤其是制作一些复杂炫酷的效果的时候,实际上是将一些简单的东西通过数学上精密的计算组合到一起形成的效果。这其中可能会涉及到画布的相关操作(旋转),以及一些正余弦函数的计算等,这些内容就会用到一些角度、弧度相关的知识。

  • 角度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。
  • 弧度:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度。

圆一周对应的角度为360度(角度),对应的弧度为2π弧度。

故得等价关系:360(角度) = 2π(弧度) ==> 180(角度) = π(弧度)

//rad 是弧度, deg 是角度
rad = deg x π / 180
deg = rad x 180 / π

颜色

几种创建或使用颜色的方式

  1. java中定义颜色
 int color = Color.GRAY;     //灰色

 int color = Color.argb(127, 255, 0, 0);   //半透明红色
  
 int color = 0xaaff0000;                   //带有透明度的红色
  1. 在xml文件中定义颜色
  #ff0000
  #00ff00
  #f00            //低精度 - 不带透明通道红色
  #af00           //低精度 - 带透明通道红色
  
  #ff0000         //高精度 - 不带透明通道红色
  #aaff0000       //高精度 - 带透明通道红色

自定义属性

Android自定义属性可分为以下几步:

  1. 自定义属性的声明文件
    编写values/attrs.xml,在其中编写styleable和item等标签元素
    
    
        
            
            
        
    

2.自定义View中获取属性

 //在View的构造方法中通过TypedArray获取
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.test);
String text = ta.getString(R.styleable.test_testAttr);
int textAttr = ta.getInteger(R.styleable.test_text, -1);

3.在布局中使用

 

4.属性值的类型归纳

  • reference资源id
//属性定义

//属性使用

  • color颜色值
//属性定义

//属性使用

  • boolean布尔值
//属性定义

//属性使用
  • dimension尺寸值
//属性定义

//属性使用
  • float浮点值
//属性定义

//属性使用

  • integer整型值
//属性定义

//属性使用

  • string字符串
//属性定义

//属性使用

  • fraction百分数
//属性定义

//属性使用

  • enum枚举
//属性定义
 
        
        
    
//属性使用


  • flag位或运算
//属性定义

            
            
            
            
            
            ...
    
//属性使用

  • 混合类型
//属性定义
 
//属性使用

或者:

你可能感兴趣的:(Android自定义View基础篇)