Android自定义View剖析

上传人:工**** 文档编号:470617954 上传时间:2023-09-26 格式:DOCX 页数:13 大小:56.38KB
返回 下载 相关 举报
Android自定义View剖析_第1页
第1页 / 共13页
Android自定义View剖析_第2页
第2页 / 共13页
Android自定义View剖析_第3页
第3页 / 共13页
Android自定义View剖析_第4页
第4页 / 共13页
Android自定义View剖析_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《Android自定义View剖析》由会员分享,可在线阅读,更多相关《Android自定义View剖析(13页珍藏版)》请在金锄头文库上搜索。

1、Android自定义View(、初体验自定义TextView)对于一个Android攻城狮来说,自定义控件是一项必须掌握的重要技能点,然而对于大部分人而言,感觉自定义控件并不是那么容易。在工作过程中难免遇到一些特效需要自己定义控件实现,如果你不会,内心会有强烈的挫败感,这对一个程序员来说是决不能容忍的,接下来我将写一系列博客,和大家一起学习自定义控件,让她赤裸裸的站在我们的面前,让我们为所欲为:joy:言归正传,接触到一个类,你不太了解他,如果贸然翻阅源码只会让你失去方向,不知从哪里下手;所以我们应该从文档着手,看看它是个什么东西,里面有哪些属性和方法,都是用来干嘛的。下面我们看看官方文档对V

2、iew的介绍:View这个类代表用户界面组件的基本构建块。View在屏幕上占据一个矩形区域,并负责绘制和事件处理。View是用于创建交互式用户界面组件(按钮、文本等)的基础类。它的子类ViewGroup是所有布局的父类,它是一个可以包含其他view或者viewGroup并定义它们的布局属性的看不见的容器。实现一个自定义View,你通常会覆盖一些framework层在所有view上调用的标准方法。你不需要重写所有这些方法。事实上,你可以只是重写onDraw(android.graphics.Canvas)。分类方法说明构造Construe:tors有一种形式的构造方注是使用代码创連的时攸调用的,

3、虽一种形式是忻旳彼布局文件境充时被调用的.第二种形式应该解析和使用一些属性定义在布局文件中oriFinishinflate()当比西和他的所有子控件被冊廊局文件埴充完成时皱调用.(遠个方法里面可议完成一些申鳩化比如初始化子控件)布局ordMeasut$(iint)当决定応衅和他的孩子的尺寸需求时被调用也就是测量揑件大小时调用)osiLsycmtint)当听e给也的孩子分酉3大中和位置的时候调用(摆放孑控件JoaSizd(iinJi仇匕iat)当眈旳犬小握生吏化吋调用绘制d.graphics.Ctnvas)当視團应诵呈现蔑内容时调用(絵制)爭件处理oitKeyDown(iKeyEvent)按键时

4、彼调用onKeyUpKeyEveiit)按龍菠抬起时调用nTrackballEvsntonEvsnl)Calledwhen&trackbillmotion.evntoccurs.onTouchEvent(MotionEvent)袖摸屏算时调用焦点o-xJocusChaiiLged(bo*1ean,in忙android,graphics.Red)慕取到或者妄巻像点是调用qhWindowFosueCTluigad(booltan)宙口获取或者失去库点是碉用札11achingoiukttachedToWindow0当視国被连接剽一个窗口时调用ogBetachedFroinWixid-ow()当视團从

5、.窗口曲离时调用indowVisibilid(irLt)当听纱的窗口的可见性境生改娈时调用从上面官方文档介绍我们可以知道,View是所有控件(包括ViewGroup)的父类,它里面有一些常见的方法(上表),如果我们要自定义View,最简单的只需要重写onDraw(android.graphics.Canvas)即可,听起来是不是很简单?那我们就动手自定义一个属于自己的TextView吧。1. 继承View,重写onDraw方法创建一个类MyTextView继承View,发现报错,因为要覆盖他的构造方法(因为View中没有参数为空的构造方法),View有四种形式的构造方法,其中四个参数的构造方法

6、是API21才出现,所以一般我们只需要重写其他三个构造方法即可。它们的参数不一样分别对应不同的创建方式,比如只有一个Context参数的构造方法通常是通过代码初始化控件时使用;而两个参数的构造方法通常对应布局文件中控件被映射成对象时调用(需要解析属性);通常我们让这两个构造方法最终调用三个参数的构造方法,然后在第三个构造方法中进行一些初始化操作。publicclassMyViewextendsView/*需要绘制的文字*/privateStringmText;/*文本的颜色*/privateintmTextColor;/*文本的大小*/privateintmTextSize;/*绘制时控制文本

7、绘制的范围*/privateRectmBound;privatePaintmPaint;publicMyTextView(Contextcontext)this(context,null);publicMyTextView(Contextcontext,AttributeSetattrs)this(context,attrs,0);publicMyTextView(Contextcontext,AttributeSetattrs,intdefStyleAttr)super(context,attrs,defStyleAttr);/初始化mText=Udf32fA;mTextColor=Colo

8、r.BLACK;mTextSize=100;mPaint=newPaint();mPaint.setTextSize(mTextSize);mPaint.setColor(mTextColor);/获得绘制文本的宽和高mBound=newRect();mPaint.getTextBounds(mText,0,mText.length(),mBound);/API21/publicMyTextView(Contextcontext,AttributeSetattrs,intdefStyleAttr,intdefStyleRes)/super(context,attrs,defStyleAttr,

9、defStyleRes);/init();/OverrideprotectedvoidonDraw(Canvascanvas)/绘制文字canvas.drawText(mText,getWidth()/2-mBound.width()/2,getHeight()/2+mBound.height()/2,mPaint);布局文件:运行结果:2. 上面我只是重写了一个onDraw方法,文本已经绘制出来,说明到此为止这个自定义控件已经算成功了。可是发现了一个问题,如果我要绘制另外的文本呢?比如写iloveyou,那是不是又得重新定义一个自定义控件?跟上面一样,只是需要修改mText就可以了;行,再写一遍,那如果我现在又想改变文字颜色为蓝色呢?在写一遍?这时候就用到了新的知识点:自定义属性自定义属性在res/values/下创建一个名为attrs.xml的文件,然后定义如下属性:format的意思是该属性的取值是什么类型(支持的类型有string,color,demension,integer,enum,reference,float,boolean,fraction,flag)然后在布局文件中使用自定义属性,记住一定要引入我们的命名空间xmlns:openxu=http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号