自定义view

1.android当中的优化:
1.栈内存优化: 存放局部变量,优化方法用算法减少方法的调用次数,降低方法的运行时间。
举例子: listview当中viewholder+settarget的使用,减少了findviewbyid的次数。(程序运行是在栈内存中)
2.堆内存优化: 存放对象的,优化的方法 1.减少不必要对象的创建,单例模式 2.在对象使用完成后,回收处理。
举例子:listview当中的convertview的复用
3.java代码优化: 熟练使用面向对象的特点,1.封装工具类 2.把一些相关类的特性提取出来做父类。
4.布局优化: 1.使用include关键字在布局中把成块的布局代码提取出来。
2。自定义view封装布局中的片段代码。

2.android当中常用的布局加载时间最快的是:FrameLayout
android当中的xml文件解析的方法是:pull解析

3.为什么要自定义view:
(1).当系统提供的view不能够满足我们的开发要求的时候。
(2).处理特定的显示风格。
(3).处理特有的用户交互。
(4).优化布局

4.自定义view的分类:
(1).完全的自定义view
一般是继承于view并且重写其方法绘制view组件。

(2).继承已有的ui控件。
继承一个控件,然后拓展其功能。(比如记事本)

(3).组合定义的ui控件
继承于viewgroup,将多个小组件组成一个大的ui控件。

5.自定义view的构造函数的使用:
(1).一个参数的构造:必须要写的构造方法,目的是为了在java代码当中创建自定义view的对象
(2).两个参数的构造:如果自定义想要定义在布局当中,必须要定义这个构造方法。
(3).三个参数的构造:默认的自定义的风格。

6.onDraw:绘制自定义view显示的内容
7.Canvas :画布 确定了绘制的区域,提供了不同的绘制的方法,来完成绘制。
Canvas在api当中的方法的分类:
* 1.绘制图片 :drawBitmap drawPicture
* 2.绘制颜色: drawColor drawARGB
* 3.绘制基本几何形状 : drawPoint,drawLine,drawCircle,drawArc,drawRect,drawOval,drawRoundRect
* 4.绘制剪切区: clipPath, clipRect,clipRegion,drawPath
* 5.变换Canvas :save,rotate,restore,translate,scale,
* 6.绘制顶点数据:drawVertices, drawBitmapMesh

8.View.MeasureSpec是view的静态内部类,反映了view的高度和宽度的尺寸和传入的测量方式。
widthMeasureSpec和heightMeasureSpec表示他的对象的内容,内容包含了两个值:

测量方式分为三种:
1.AT_MOST :代表是不固定的值,根据内部的内容进行展示,通常定义为wrap_content会传入的模式。
2.EXACTLY :代表精确的值,当view的宽度或者高度被定义为match_parent或固定值时会传入的模式。
3.UNSPECIFIED :没有限制的,不固定的,通常是用于复杂控件如listview,gridview

9.Shader 颜色渲染
在Android中,提供了Shader类专门用来渲染图像以及一些几何图形。
Shader类包括了5个直接子类,分别为:BitmapShader、ComposeShader、LinearGradient、RadialGradient以及SweepGradient。其中,BitmapShader用于图像渲染;ComposeShader用于混合渲染;LinearGradient用于线性渲染;RadialGradient用于环形渲染;而SweepGradient则用于梯度渲染。
使用Shader类进行图像渲染时,首先需要构建Shader对象,然后通过Paint的setShader()方法来设置渲染对象,最后将这个Paint对象绘制到屏幕上即可。
有一点需要注意,使用不同的方式渲染图像时需要构建不同的对象。
(1).BitmapShader(图像渲染)
BitmapShader的作用是使用一张位图作为纹理来对某一区域进行填充。可以想象成在一块区域内铺瓷砖,只是这里的瓷砖是一张张位图而已。
Shader.TileMode有3种参数可供选择,分别为CLAMP、REPEAT和MIRROR。
CLAMP的作用是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色。REPEAT的作用是在横向和纵向上以平铺的形式重复渲染位图。MIRROR的作用是在横向和纵向上以镜像的方式重复渲染位图。

(2).LinearGradient(线性渲染)
LinearGradient的作用是实现某一区域内颜色的线性渐变效果。
参数positions设为null,表示颜色数组以斜坡线的形式均匀分布。

(3).ComposeShader(混合渲染)
ComposeShader的作用是实现渲染效果的叠加,如BitmapShader与LinearGradient的混合渲染效果等。
public ComposeShader (Shader shaderA, Shader shaderB, PorterDuff.Mode mode);
其中,参数shaderA表示某一种渲染效果;参数shaderB也表示某一种渲染效果;参数mode表示两种渲染效果的叠加模式。
PorterDuff.Mode有16种参数可供选择,分别为:CLEAR、SRC、DST、SRC_OVER、DST_OVER、SRC_IN、DST_IN、SRC_OUT、DST_OUT、SRC_ATOP、DST_ATOP、XOR、DARKEN、LIGHTEN、MULTIPLY、SCREEN。
(4).RadialGradient(环形渲染)
RadialGradient的作用是在某一区域内实现环形的渐变效果。
RadialGradient的函数原型为:
public RadialGradient (float x, float y, float radius, int[] colors, float[] positions, Shader.TileMode tile);
其中,参数x表示环形的圆心x坐标;参数y表示环形的圆心y坐标;参数radius表示环形的半径;参数colors表示环形渐变的颜色数组;参数positions用来指定颜色数组的相对位置;参数tile表示平铺的方式。
(5).SweepGradient(梯度渲染)
SweepGradient也称为扫描渲染,是指在某一中心以x轴正方向逆时针旋转一周而形成的扫描效果的渲染形式。
SweepGradient的函数原型为:
public SweepGradient (float cx, float cy, int[] colors, float[] positions);
其中,参数cx表示扫描的中心x坐标;参数cy表示扫描的中心y坐标;参数colors表示梯度渐变的颜色数组;
参数positions用来指定颜色数组的相对位置。

10.自定义属性的类型:
format 可以用|来同时使用
1、reference 参考某一资源Id
2、color 颜色值
3、boolean 布尔值
4、dimension 尺寸值(带有单位的 sp/dp)
5、float 浮点型
6、intager 整形
7、string 字符串
8、fraction 百分比
9、enum 枚举
10、flag 位或运算

10.自定义view的基本步骤:
1.写一个类继承与view,重写构造方法。
2.重写onDraw和onMeasure方法
onDraw:在此方法中描绘自定义view当中的内容。
onMeasure:在此方法中得出在布局定义时的模式和尺寸,进一步设定自定义view的宽度和高度。

11.自定义属性的过程:
1.在res/values文件夹中创建attrs的xml文件。
2.写入标签, 定义子标签attr,放入自定义属性的名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值