Thanks to visit codestin.com
Credit goes to github.com

Skip to content

CodeForYc/AndroidUI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

AndroidUI

主要用于记录自身学习UI方面心得,该学习笔记主要从以下几个方面着手:
##1.基本控件的学习

无论是学习控件还是自定义View,首先都需要掌握View的生命周期,尽管很少地方涉及,但周期的确很重要: ![](/Users/yingcheng/view_life_cycle.png) 如果想觉得这个周期不是很清楚,想关注更多细节,可以通读此文[自定义View](http://chen-wei.me/2017/02/16/%E6%95%B4%E4%B8%AA%E8%87%AA%E5%AE%9A%E4%B9%89View/)

##2.自定义View的学习

进入自定义View,必须清楚以下基本点:

1.在数学中常见坐标系与屏幕默认坐标系的区别

2.View的坐标系是相对于父控件而言的,即(getTop(),getLeft(),getBottom(),getRight())

3.MotionEvent中getX() & getY()与getRawX & getRawY区别

4.角度和弧度的区别 rad(弧度)°(角度) rad=deg\*pi/180 deg = rad*180/pi 屏幕坐标中角度增大方向是顺时针而数学系则反之

5.颜色,ARGB(四通道,透明,红,绿,蓝,值从0x00-0xff表示透明到不透明,色值从浅值深)dst表示canvas原有的内容 src表示新的内容 **自定义View基本流程**

step1: View初始化(构造函数)

step2: 测量View的大小(onMeasure)

step3: 确定View大小(onSizeChanged)

step4: 确定View布局位置(onLayout,通常存在子View才需要)

step5: 实际绘制(onDraw)

step6: 控制View或监听View的某些状态(如:onTouchEvent,onClickListener)

绘制的时候最重要的东西就Canvas(画布),Paint(画笔)以及图层

理解图层状态栈的意义,理解save和restore & saveLayer*** & restoreToCount & saveFlags等

采用Canvas绘制图片时,一般使用两个方法drawPicture(矢量图) & drawBitmap(位图)

1.drawPicture就好比录制,一般采用beginRecording和endRecording方法,方法成对出现,相当于把该区间内的绘制动作录下来,后面就可以重复该操作了,省时省力,建议使用canvas.drawPicture执行录制的东西,该方法不影响canvas状态 (但该方法使用需要关闭硬件加速)

2.drawBitmap,bitmap就是问题的根源,什么OOM都很容易导致,至于这个方法大家都很熟悉不记录了,不过做帧动画的不妨尝试下这个方法

绘制文字主要分三类:

1.只能指定文本基线位置;

2.可以指定每个文字的位置,但必须每个文字的位置都要指定,否则crash,且该方法性能不佳

3.指定一个路径,根据路径绘制文字

现在登场的是Path,为了避免没必要的问题,请关闭硬件加速

第一组方法:moveTo & setLastPoint & lineTo & close

第二组方法:addXxx & arcTo,主要在path上添加基本图形

demo中RadaView就是对save和Path的具体实战

PathMeasure使用

在使用PathMeasure之前,先确定其与一个Path相关联,如果后续对Path进行了更改,需重新调用setpath更新。

*重要方法*:

setPath:是PathMeasure与Path关联的重要方法

isClosed:用于判断Path是否闭合

getLength用于获取Path的总长度

getSegment:用于获取Path的一个片段

nextContour:用于跳转到下一条曲线,如果跳成功则返回true;

getPosTan:用于获取路径上某个长度的位置以及该位置正切值

getMatrix:得到某一长度的位置以及该位置的正切值的矩阵

关于PathMeasure的实践可以参考PathMeasureView和SearchView

**Matrix的学习**

首先明白一点就是内容坐标和屏幕坐标相差一个通知栏+标题栏的距离 也就是说通知栏高度为20,标题栏高度为40的话,那么内容的左上角坐标为(0,60)

Matrix的四个基本变换:translate,scale,rotate,skew

重点理解像素点坐标列矩阵以及元矩阵

理解pre,post,set三类操作前置的意义 pre矩阵右乘 M *T post矩阵左乘 T *M,在图像处理中,越靠近右边的矩阵越先执行,所以给人就是post后执行,pre先执行

重要方法:toShortString(),reset & set,setValues(大于9个数据)

特殊方法:setPolyToPoly & setRectToRect不要小瞧这个东西,用好了可以得到意想不到的效果

Matrix使用技巧:

1.获取View在屏幕上的绝对位置,canvas.getMatrix(loc)当然你通过getLocationOnScreen也可以

2.利用Matrix的setPolyToPoly到达折叠效果,可以参考demo PolyView 也可以参考[大神博文](http://blog.csdn.net/lmj623565791/article/details/44278417)


2.1 继承View
2.2 继承ViewGroup 需要定义ViewGroup,如果对getMeasuredWidth和getWidth分别在何时调用不太清楚,可以看下这个文章
2.3 继承现有的控件View ##3.学习自己干兴趣的View以及自己觉得有意思的View

##4.动画的基本学习

##5.framework层对View的基本原理

##资料大汇总

[杂七杂八一堆](http://www.jianshu.com/p/a5b1e778744f )

[android自定义View系列教程](http://www.gcssloop.com/customview/CustomViewIndex)

[技术成长](https://yedaxia.github.io/Android-Learning-Team/)

[混淆手册](https://yq.aliyun.com/articles/62980?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&2017314&utm_content=m_13399)

About

主要用于记录自身学习UI方面心得

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages