Android开发指南-二维图形
Android移动开发基础教程 第2章 Android界面开发

android:textSize
显示文字的大小
android:textColor
显示文字的颜色
android:gravity
文字在文本框中的位置
android:ellipsize
文字内容超过文本框大小时的显示方式
android:password
是否以点代替显示输入的文字
android:editable
设置当前对话框是否可以被取消
setIcon(Drawable icon)
设置对话框的标题图标
setItems(CharSequence[] items, .OnClickListener listener)
DialogInterface
将对话框的内容设置为列表
setMessage(CharSequence message)
2.4 对话框
自定义对话框
除了创建已有的对话框样式外,AlertDialog.Builder还支持调用serView()方法显示自定义的View。
通过XML布局文件控制Android的界面,可以使界面的设计更加简单清晰,具有更低地耦合性。而且这种方式可以将 视图的逻辑从Java代码中抽离出来,更加符合MVC的设计原则。Android也推荐使用XML的方式设计界面。
Android开发基础知识入门
第2章 Android界面开发
2.2 常用布局
线性布局
2.1 视图组件和视图容器
基本概念
(1)组件或控件:界面的基本元素; (2)视图(View):所有控件的基类; (3)视图容器(ViewGroup):控件的载体;
Android开发基础知识入门
第2章 Android界面开发
2.1 视图组件和视图容器
手机结构设计之2D工程图制图规范(经典建议收藏)

手机结构设计之2D工程图制图规范(经典建议收藏)小编呕心整理,这里基本囊括了工程制图的全部内容,并用手机图档实例进行了简要说明,值得做设计的你收藏。
1.球标顺序视图内部逆时针,从上部开始;视图之间顺时针,从主视图开始备注:基本视图之间不能插入非基本视图,以免割裂基本的投影关系。
2.标题栏说明首字母大写,用中杠连接3.设变栏说明4.各种带符号的尺寸说明5.多个尺寸相同标注尺寸序号的说明对于boss孔/柱,卡扣,定位孔/柱等2-、3-、n-尺寸的说明:2-尺寸,标注位置处尺寸为2-1,另一处为2-2;测量报告里需全部提供;3-及以上尺寸,需要在图纸上明确指出具体位置;详细见附录3;卡扣标注方式,卡扣有3种情况,不同情况标注方法不一样:1)一般情况,只标注Z向配合面;2)对于装饰片的卡扣:标注Z向配合,卡扣配合长度;3)对于卡主板的卡扣:端面到基准的位置;6.基准、剖视图和详细视图、局部视图标号使用说明所有剖视图和详细视图、局部视图使用字母A~W;其中:A~L为剖视图使用;M~W为详细视图、局部视图使用;X、Y、Z为基准;隐藏视图中未被使用的基准(建议)CL,基准标记不要穿过尺寸线(建议)7.公差带《一》塑胶件和压铸件(侧键、侧塞按照塑胶件)>0 ~6 ±0.05>6 ~ 15 ±0.08>15 ~ 30 ±0.10>30 ~ 60 ±0.12>60 ~ 150 ±0.15《二》钣金件和锻压(CNC)件包含punch,bending,form,CNC等各种工艺,punch和CNC工艺公差可以更小,如果结构配合上有需要可以在重要尺寸上标更严的公差。
>0 ~ 30 ±0.05>30 ~ 60 ±0.08>60 ~ 150 ±0.10《三》主按键(P R, Rubber)P R按键PC部分尺寸公差全部标出来。
Android游戏开发(快速入门必备)

Android游戏开发之旅一长按Button原理今天Android123开始新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有一些游戏实现惯用方法,比如地图编辑器,在Android OpenGL如何使用MD2文件,个部分讲述下Android游戏开发的过程最终实现一个比较完整的游戏引擎。
相信大家都清楚Android Market下载量比较好的都是游戏,未来手机网游的发展相信Android使用的Java在这方面有比iPhone有更低的入门门槛。
对于很多游戏使用屏幕控制一般需要考虑长按事件,比如在动作类的游戏中需要长按发射武器,结合Android Button模型,我们实现一个带图片的Button的长按,为了更清晰的显示原理,Android开发网这里使用ImageButton作为基类public class RepeatingImageButton extends ImageButton {private long mStartTime; //记录长按开始private int mRepeatCount; //重复次数计数private RepeatListener mListener;private long mInterval = 500; //Timer触发间隔,即每0.5秒算一次按下public RepeatingImageButton(Context context) {this(context, null);}public RepeatingImageButton(Context context, AttributeSet attrs) {this(context, attrs, android.R.attr.imageButtonStyle);}public RepeatingImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);setFocusable(true); //允许获得焦点setLongClickable(true); //启用长按事件}public void setRepeatListener(RepeatListener l, long interval) { //实现重复按下事件listener mListener = l;mInterval = interval;}@Overridepublic boolean performLongClick() {mStartTime = SystemClock.elapsedRealtime();mRepeatCount = 0;post(mRepeater);return true;}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_UP) { // 本方法原理同onKeyUp的一样,这里处理屏幕事件,下面的onKeyUp处理Android手机上的物理按键事件removeCallbacks(mRepeater);if (mStartTime != 0) {doRepeat(true);mStartTime = 0;}}return super.onTouchEvent(event);}//处理导航键事件的中键或轨迹球按下事件@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:super.onKeyDown(keyCode, event);return true;}return super.onKeyDown(keyCode, event);}//当按键弹起通知长按结束@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_CENTER:case KeyEvent.KEYCODE_ENTER:removeCallbacks(mRepeater); //取消重复listener捕获if (mStartTime != 0) {doRepeat(true); //如果长按事件累计时间不为0则说明长按了mStartTime = 0; //重置长按计时器}}return super.onKeyUp(keyCode, event);}private Runnable mRepeater = new Runnable() { //在线程中判断重复public void run() {doRepeat(false);if (isPressed()) {postDelayed(this, mInterval); //计算长按后延迟下一次累加}}};private void doRepeat(boolean last) {long now = SystemClock.elapsedRealtime();if (mListener != null) {mListener.onRepeat(this, now - mStartTime, last ? -1 : mRepeatCount++);}}下面是重复Button Listener接口的定义,调用时在Button中先使用setRepeatListener()方法实现RepeatListener接口public interface RepeatListener {void onRepeat(View v, long duration, int repeatcount); //参数一为用户传入的Button 对象,参数二为延迟的毫秒数,第三位重复次数回调。
Android开发之Path类使用详解,自绘各种各样的图形!

Android开发之Path类使⽤详解,⾃绘各种各样的图形!玩过⾃定义View的⼩伙伴都知道,在View的绘制过程中,有⼀个类叫做Path,Path可以帮助我们实现很多⾃定义形状的View,特别是配合xfermode属性来使⽤的时候。
OK,那我们今天就来看看Path中那⼏个常⽤的API。
1.moveTomoveTo表⽰将绘制点移动到某⼀个坐标处,该⽅法并不会进⾏绘制,主要是⽤来移动画笔。
默认情况下起始坐标位于(0,0)点,我们可以⼿动调整默认位置。
2.lineTolineTo表⽰绘制⼀条直线,参数表⽰⽬标坐标如下:@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Path path = new Path();path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x),getResources().getDimensionPixelSize(R.dimen.dot1x));canvas.drawPath(path, paint);}显⽰效果如下:默认情况下,起始点为(0,0)点,如果我⽤moveTo将起始点坐标移⾄(0,150),代码如下:@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Path path = new Path();path.moveTo(0,getResources().getDimensionPixelSize(R.dimen.dot1x));path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x),getResources().getDimensionPixelSize(R.dimen.dot1x));canvas.drawPath(path, paint);}3.quadToquadTo可以⽤来绘制⼀个带控制点的曲线,说⽩了,其实就是贝塞尔曲线。
android游戏开发教程

Android游戏开发教程前言随着移动设备的普及,Android平台上的游戏市场蓬勃发展。
越来越多的人开始对Android游戏开发产生兴趣。
本文将介绍一些基本的Android游戏开发知识,帮助初学者快速入门。
1. Android游戏开发简介Android游戏开发是指在Android平台上开发游戏应用程序。
Android提供了强大的开发工具和丰富的API,使得游戏开发变得更加简单和高效。
2. 开发环境搭建要开始Android游戏开发,您需要搭建适当的开发环境。
以下是搭建开发环境的步骤:•安装Java开发工具包(JDK)•安装Android开发工具包(Android SDK)•配置Android开发环境•使用Android Studio进行开发3. 游戏开发基础知识在开始Android游戏开发之前,了解一些基本的游戏开发知识将会非常有帮助。
以下是一些重要的概念:•游戏循环:游戏循环是指游戏的主要执行逻辑。
它通常包含三个主要阶段:输入处理、更新游戏状态和渲染。
•游戏物体:游戏物体是游戏中的所有实体,如角色、地图、道具等。
它们具有属性和行为,可以根据游戏逻辑进行交互。
•物理引擎:物理引擎用于模拟现实世界的物理规则,如重力、碰撞等。
它可以使游戏更加真实和流畅。
•图形和动画:游戏中的图形和动画是吸引玩家的重要因素。
Android提供了丰富的图形和动画库,可以帮助您创建精美的游戏界面。
4. Android游戏开发框架在Android游戏开发中,使用游戏开发框架可以加快开发速度并提高代码质量。
以下是一些常用的Android游戏开发框架:•Unity:Unity是一款强大的跨平台游戏开发引擎,支持Android平台。
它提供了丰富的功能和工具,可以帮助开发者创建各种类型的游戏。
•LibGDX:LibGDX是一款轻量级的游戏开发框架,它基于Java语言,支持Android平台。
它提供了简单易用的API和丰富的扩展功能,适合初学者和中级开发者使用。
《第2章二维绘图基础》

图层状态控制技巧
打开/关闭图层
在图层管理器中,点击图层名称左侧的灯泡图标,可以打 开或关闭该图层。关闭的图层将不显示在绘图区域中。
冻结/解冻图层
点击图层名称左侧的雪花图标,可以冻结或解冻该图层。 冻结的图层将无法进行编辑和选择,但不影响层名称左侧的锁图标,可以锁定或解锁该图层。锁 定的图层将无法进行编辑和修改,但可以进行选择和查看。
准备绘图工具
选择合适的二维绘图软件,并熟悉其 基本操作和功能。
实例分析:关键步骤和技巧讲解
绘制基本图形
01
利用绘图工具绘制点、线、面等基本图形元素。
进行图形编辑
02
对绘制的图形进行移动、旋转、缩放等编辑操作,以满足特定
需求。
完善细节处理
03
对图形进行细节调整,如修改颜色、线型等,提升图形质量。
实例分析:关键步骤和技巧讲解
精确控制图形位置
使用坐标输入或对象捕捉功能,确保图形的精确定位。
利用图层管理图形
通过图层功能对图形进行分类管理,提高编辑效率。
实例分析:关键步骤和技巧讲解
使用快捷键加速操作
熟练掌握常用快捷键,提高绘图和编辑速度。
保持图形比例和尺寸
在进行缩放等操作时,注意保持图形的比例和尺寸关系。
实例操作演示:详细步骤展示
符号插入法
在文本编辑器中选择插入符号功 能,找到需要的特殊字符并插入。
编码输入法
了解特殊字符的编码,通过输入 编码实现特殊字符的输入。
复制粘贴法
从其他来源复制需要的特殊字符, 然后粘贴到目标位置。
04
图层管理与属性设置
图层概念及作用
图层定义
图层是图形文件中的独立透明薄片, 用于组织和管理不同类型的图形对象 。
Android UI设计指南

会取代你的启动器图标。 如何更容易的将高精度图标缩放到 512*512 的提示和建议, 在设计师建议章 节中有讲。 对于高精度的应用程序图标,在 Android Market 的信息和规格,请参阅下面 的文章: 应用程序图形资源(Android Marker 帮助说明) � Android2.0 以后版本
高精度屏幕的启动图标尺寸: 外框:72x72px 图标:60x60px 方形图标:56x56px 中精度屏幕的启动图标尺寸: 外框:48x48px 图标:40x40px 方形图标:38x38px 低精度屏幕启动图标尺寸: 外框:36x36px 图标:30x30px 方形图标:28x28px
材质和颜色 启动图标要有触感、明亮和有质感的材质,即使图标只是简单的形状,但也要尝试一些 取之于现实世界的材质来表现。 Android 启动图标通常由一个大的基本形状,一个中立和主色调组成的较小的形状。图 标可能使用一个保持有相当对比度的中性色。 如果可能的话, 每个图标不使用一个以上的主 色。 图标应该使用包括一系列暗淡的和基本的的色调。不能用太饱和的色调。 启动图标推荐使用的色调如图 3,你可以从中选择元素的基础色和高亮色。也可以使用
24w x 38h px (preferred, width may vary)
状态栏图标 (Android 2.2 及之前版本 )
19 x 19 px
25 x 25 px
38 x 38 px
Tab 图标
24 x 24 px
32 x 32 px
48 x 48 px
对话图标
24 x 24 px
32 x 32 px
Android UI 设计指南(自译) 一、图标设计指南
创建一个统一的外观和整体的用户界面效果以增加产品的价值, 精简的图形样式还能让 用户觉得 UI 更专业。 本文提供的信息能帮助你为应用的用户界面的各个部分创建的图标与 Android2.X 框架 的一般样式相匹配。以下的指南将帮助你创建一个完美而且统一的用户体验。 下面文档讨论关于 Android 应用程序常见类型图标的使用详细指南: 启动图标 启动图标是您的应用程序在设备的主界面和启动窗口的图形表现。 菜单图标 菜单图标是当用户按菜单按钮时放置于选项菜单中展示给用户的图形元素。 状态栏图标 状态栏图标用于应用程序在状态栏中的通知。 Tab 图标 Tab 图标用来表示在一个多选项卡界面的各个选项的图形元素。 对话框图标 对话框图标是在弹出框中显示,增加互动性。 列表视图图标 使用列表视图图标是用图形表示列表项,比如说设置这个程序。 想更快的创建你的图标,可以导向 Android 图标模板包。
安卓开发教程

安卓开发教程Android开发教程是一个广泛的主题,包括了许多方面的知识和技巧。
本文将提供一些有关安卓开发的常用技术和实践方法的介绍,帮助初学者快速入门。
1. 安卓开发环境的搭建安卓开发需要使用Android Studio IDE作为开发工具。
安装和配置Android Studio的步骤可以在官方网站上找到。
2. 安卓应用的结构安卓应用采用MVC(模型-视图-控制器)的架构模式。
模型负责数据管理,视图负责用户界面展示,控制器负责逻辑处理。
3. 安卓布局的设计安卓应用使用XML文件定义布局。
可以使用线性布局、相对布局、表格布局等不同的布局来组织界面元素。
4. 安卓界面控件的使用安卓提供了丰富的界面控件,如按钮、文本框、复选框、单选框、滑动条等。
可以通过XML布局文件或者Java代码来创建和使用这些控件。
5. 安卓事件处理安卓应用可以对用户的操作事件进行响应,如点击按钮、滑动屏幕、触摸等。
可以通过注册监听器来实现事件的处理逻辑。
6. 安卓数据存储安卓应用可以使用SQLite数据库进行数据的持久化存储。
可以使用SQL语句来创建表、插入、查询、更新和删除数据。
7. 安卓权限管理安卓应用需要在AndroidManifest.xml文件中声明和请求权限。
应该合理使用权限,只请求应用所需的最小权限。
8. 安卓网络编程安卓应用可以通过HTTP协议与服务器进行通信。
可以使用HTTPURLConnection或者第三方库如Volley、Retrofit来实现网络请求。
9. 安卓多线程编程安卓应用使用主线程来处理用户界面交互,耗时的操作应该在子线程中执行,以避免界面卡顿。
可以使用AsyncTask或者线程池来管理多线程操作。
10. 安卓应用发布安卓应用需要进行打包签名后才能发布到应用商店或者直接安装到设备上。
可以使用Android Studio的打包工具来生成APK 文件。
以上是安卓开发的一些基本知识和技巧,希望能对初学者有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android开发指南-二维图形收藏二维图形2D GraphicsAndroid 提供一个定制的2D图形库,用来绘制图形图像和制作动画。
你将从android.graphics.drawable和android.view.animation包中找到这些通用类。
本文简单介绍如何在Android应用程序中进行画图。
我们将讨论使用Drawable对象画图的基础知识,如何使用几个Drawable子类,以及如何创建动画,一个图形的补间动画或者一系列图形的连续动画(就像电影胶卷一样)。
可绘制物Drawables一个Drawable 是一个“某些可以被绘制的物体”的一般抽象。
你将发现这个Drawable类扩展了多种具体可绘制图形类,包括BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable, 等等。
当然,你还可以扩展这些类来定义你自己的具有独特行为的可绘制对象。
有三种方式来定义和实例化一个Drawable:使用一个保存在你的项目资源中的图像;使用一个定义了Drawable属性的XML文件;或者使用通常的类构造函数。
下面,我们将挨个讨论前面两种方法(对于一个经验丰富的开发人员而言,使用构造函数没什么新意)。
从资源图像中创建Creating from resource images一个为你的应用程序增加图形的简单方法是通过引用项目资源中的一个图片文件。
支持的图片文件格式有PNG(推荐的),JPG(可接受的)和GIF(不鼓励的)。
这个技术将显然推荐使用在应用程序图标,logo,或者其它类似使用于游戏中的图形。
为了使用一个图片资源,只要把你的文件添加到你项目的res/drawable/目录即可。
从那里,你可以在代码或XML布局中进行引用。
任何一种方式,都是通过资源ID来引用,资源ID是不带扩展后缀的文件名(比如,my_image.png通过my_image来引用)。
注意:图像资源被放在res/drawable/里。
也许会通过aapt工具进行无损图像压缩而被自动优化。
比如,一个不需要多于256色的真彩色PNG图片可能会被转换成一个带有调色板的8位PNG。
这产生了相同质量但占用更少内存的图片。
因此需要意识到该目录下的二进制图像可能会在编译期间被改变。
如果你想以比特流读取一个图片并转换为一个位图,那么需要把你的图片文件放在res/raw/目录,这里的文件不会被优化。
示例代码Example code下面的代码片断说明了如何构造一个ImageView,从drawable资源中使用并添加到布局中。
LinearLayout mLinearLayout;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Create a LinearLayout in which to add the ImageViewmLinearLayout = new LinearLayout(this);// Instantiate an ImageView and define its propertiesImageView i = new ImageView(this);i.setImageResource(R.drawable.my_image);i.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensionsi.setLayoutParams(newyoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));// Add the ImageView to the layout and set the layout as the content viewmLinearLayout.addView(i);setContentView(mLinearLayout);}在其它情况下,你可能想把你的图片资源当作一个可绘制Drawable对象。
为此,你可以这样做:Resources res = mContext.getResources();Drawable myImage = res.getDrawable(R.drawable.my_image);注意:每个你项目里的唯一资源只能维护一个状态,而无论你为它实例化了多少个不同对象。
比如,如果你从相同的图像资源实例化两个可绘制对象,然后改变其中之一的属性(比如alpha),那它也将作用于另一个。
所以当处理一个图片资源的多个实例时,你应该实施一个tween animation,而不是直接转换这个可绘制对象。
示例XML下面的XML片断显示了如何添加一个可绘制资源到一个XML布局中的ImageView里(为了有趣些,添加一些红色渲染)。
<ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:tint="#55ff0000"android:src="@drawable/my_image"/>更多关于使用项目资源的信息,请阅读资源和资产Resources and Assets。
从资源XML中创建Creating from resource XML到目前为止,你应该对Android用户界面User Interface的开发原理比较熟悉。
因此,你应该了解在XML中定义对象所固有的能力和灵活性。
这个理念从视图延伸到可绘制对象。
如果你想创建一个可绘制(Drawable)对象,而它并不初始依赖于你代码中的变量或者用户交互,那么在XML里面定义它是个好的选择。
即便你预期这个可绘制对象在用户使用你的应用程序时将会改变其属性,你也应该考虑在XML里面定义它,因为一旦被实例化后,你就可以修改它的属性。
一旦你在XML中定义了你的可绘制对象,把这个文件保存到你项目中的res/drawable/目录下。
然后,通过传递资源ID参数调用Resources.getDrawable()获取并实例化这个对象。
(参见example below.)任何支持inflate()方法的可绘制对象(Drawable)子类可以在XML里定义并由你的应用程序实例化。
每个支持XML扩充的可绘制对象利用特定的XML属性来帮助定义对象属性(参见类参考了解这些属性)。
查阅每个可绘制对象子类的类描述文档,以获知如何在XML中定义它。
例子Example下面是一些定义了一个TransitionDrawable对象的XML语句:<transitionxmlns:android="/apk/res/android"><item android:drawable="@drawable/image_expand"><item android:drawable="@drawable/image_collapse"></transition>当把这个XML保存为res/drawable/expand_collapse.xml文件后,下面的代码将用来实例化它并把它设置为一个ImageView的内容:Resources res = mContext.getResources();TransitionDrawable transition = (TransitionDrawable)res.getDrawable(R.drawable.expand_collapse);ImageView image = (ImageView) findViewById(R.id.toggle_image); image.setImageDrawable(transition);然后通过下面的方法让这个transition运转起来(每1秒转变一次):transition.startTransition(1000);请参考上面所列的可绘制对象(Drawable)类以了解更多它们所支持的XML属性。
可绘制形状ShapeDrawable当你想动态的画一些二维图形时,ShapeDrawable对象可能会满足你的要求。
通过一个ShapeDrawable,你可以绘制原始图形和以任何想象得到的方式设计它们。
ShapeDrawable是Drawable的一个扩展类,因此你能使用在任何可用Drawable的地方- 也许是视图背景,用setBackgroundDrawable()方法来设置。
当然,你还能以它自己的视图来绘制图形,并添加到你的布局中只要你乐意。
因为ShapeDrawable有它自己的draw()方法,你可以创建一个视图子类在View.onDraw()方法中绘制这个ShapeDrawable。
下面这个视图类的一个基本扩展就是这么做的,把ShapeDrawable作为一个视图来绘制。
public class CustomDrawableView extends View {private ShapeDrawable mDrawable;public CustomDrawableView(Context context) {super(context);int x = 10;int y = 10;int width = 300;int height = 50;mDrawable = new ShapeDrawable(new OvalShape());mDrawable.getPaint().setColor(0xff74AC23);mDrawable.setBounds(x, y, x + width, y + height);}protected void onDraw(Canvas canvas) {mDrawable.draw(canvas);}}在构造函数里,ShapeDrawable被定义为一个OvalShape。
然后设置颜色和边界。
如果你不设置边界,那么这个图形将不被绘制,不过如果你不设置颜色的话,它会设置成缺省的黑色。
通过这个定制视图,它能以任何你想要的方式绘制。
通过上面的例子,我们能在一个活动中以编程的方式绘制这个图形:CustomDrawableView mCustomDrawableView;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mCustomDrawableView = new CustomDrawableView(this);setContentView(mCustomDrawableView);}如果你希望从XML布局中而不是活动中绘制这个自定义可绘制对象,那么这个CustomDrawable类必须重写View(Context, AttributeSet)构造函数,这个当通过XML扩充来实例化一个视图时被调用。