Android开发指南-二维图形
- 格式:docx
- 大小:53.48 KB
- 文档页数:9
手机结构设计之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游戏开发之旅一长按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类使⽤详解,⾃绘各种各样的图形!玩过⾃定义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游戏开发知识,帮助初学者快速入门。
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和丰富的扩展功能,适合初学者和中级开发者使用。
安卓开发教程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 文件。
以上是安卓开发的一些基本知识和技巧,希望能对初学者有所帮助。
Android是目前最流行的移动操作系统之一,拥有庞大的用户群体和丰富的应用开发资源。
在Android开发中,图像识别和二维码识别功能已经成为了热门的技术,为应用程序的开发增添了更多的可能性。
本文将介绍如何使用Android的图像识别和二维码识别功能进行开发。
一、图像识别功能的开发1. 图像识别原理图像识别是通过分析和处理图像中的信息,来识别出图像中的物体或特定的内容。
在Android开发中,可以利用Google提供的Vision API来实现图像识别功能。
Vision API使用机器学习的算法,可以识别出图像中的物体、文字等。
2. 集成Vision API要使用Vision API,首先需要在项目中引入Google Play服务库。
然后,在项目的文件中添加如下依赖项:```javaimplementation ':play-services-vision:'```接下来,在需要使用图像识别功能的地方,可以通过以下代码创建一个Vision API的实例:```javaGoogleApiClient mGoogleApiClient = new (this).addApi().build();();```3. 图像识别功能的实现在通过Vision API创建实例后,就可以使用该实例进行图像识别了。
例如,可以通过以下代码来实现在拍照后识别图像中的物体:```java// 创建一个Detector对象BarcodeDetector barcodeDetector = new (context).build();// 加载要识别的图像Bitmap bitmap = (imagePath);// 创建一个Frame对象Frame frame = new ().setBitmap(bitmap).build();// 识别图像中的内容SparseArray<Barcode> barcodes = (frame);// 获取识别结果if (() > 0) {Barcode barcode = (0);String barcodeValue = ;// 处理识别结果...}```二、二维码识别功能的开发1. 二维码识别原理二维码是一种编码方式,通过将信息以黑白像素点的方式编码成图形,从而实现信息的存储和识别。
安卓开发技术手册一、简介安卓操作系统是目前全球智能手机和平板电脑的主流系统之一。
作为开发者,了解安卓开发技术是非常重要的。
本文将介绍安卓开发的基础知识以及一些常用的技术和工具,旨在帮助初学者快速入门,并提供一些高级的开发技巧供有经验的开发者参考。
二、安卓开发环境搭建1. 安装Java开发工具包(JDK)安卓开发需要使用Java编程语言,所以首先需要安装JDK。
具体安装步骤可以参考官方文档或者在网上搜索安装教程。
2. 安装安卓开发工具包(SDK)安卓开发工具包(SDK)包含了一系列开发所需的工具和资源,如编译器、调试器、模拟器等。
可以从官方网站下载并按照指示安装。
3. 配置开发环境安装完SDK后,还需要进行一些配置。
例如配置JAVA_HOME环境变量、设置SDK路径等。
具体配置步骤可以参考官方文档或者开发者社区的教程。
三、安卓应用的基本结构1. 活动(Activity)活动是安卓应用中的一个核心组件,用于展示用户界面和处理用户交互。
每个活动对应一个屏幕窗口,可以包含按钮、输入框、列表等控件。
开发者需要在活动中实现一些回调方法来响应用户的操作。
2. 布局(Layout)布局决定了活动中各个控件的位置和大小。
安卓提供了多种布局类型,如线性布局、相对布局、帧布局等。
开发者可以通过XML文件或者编程方式来创建和配置布局。
3. 服务(Service)服务是在后台执行长时间运行任务的组件。
开发者可以创建一个服务来播放音乐、下载文件等,而无需与用户界面交互。
4. 广播接收器(Broadcast Receiver)广播接收器用于响应系统或其他应用发送的广播消息。
例如,接收来电广播、电池低电量通知等。
5. 内容提供者(Content Provider)内容提供者用于共享应用之间的数据。
开发者可以使用内容提供者将应用的数据暴露给其他应用访问。
6. 权限(Permission)安卓应用需要声明和请求某些权限才能访问系统资源或执行敏感操作。
Andriod绘制图形android.graphics包是核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理。
这个包中提供了很多类,下面我们就看一下这个包中主要的几个类。
一、Canvas类android.graphics.CanvasCanvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像。
一般我们用android来绘画的时候,需要四个组成部分:1、位图:包含像素2、Canvas画板:包含绘画内容,写入位图3、初始图形:如Rect、Bitmap、text等4、Paint:用来描述上面初始图形的颜色和类型等Canvas类提供了三个构造方法:Public Canvas();构造一个默认无参的Canvas对象Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas对象Public Canvas(GL gl);根据一个GL来构造一个对象下面我们来了解一下Canvas类提供的方法:在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画板中画图形,比如可以向Canvas中画位图,给图形填充颜色等。
比如方法:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)画弧形drawCircle(float cx, float cy, float radius, Paint paint)画圆形Canvas类提供的方法比较多,在此我们不一一赘述,在后面的内容中,我将给大家举几个实际的应用程序例子来演示Canvas类的使用方法。
二、Paint类android.graphics.PaintPaint类包含有用来画几何图形、文本、位图的类型和颜色等信息,如果把Canvas类看作是画板,那我们可以把Paint类看做是画笔,可以根据需要画出不同颜色和样式的图形、文本等内容。
Android开发技术标准一、语言基础1.1 Java语言Java语言是Android开发的主要语言,因此,开发者需要熟练掌握Java 语言的基础语法、面向对象编程、异常处理等知识。
1.2 Kotlin语言Kotlin语言是近年来逐渐流行的一种新型编程语言,它具有简洁、安全、跨平台等特点。
在Android开发中,Kotlin可以与Java语言互相配合,提高开发效率和代码质量。
二、操作系统2.1 Android操作系统Android操作系统是Android开发的主要平台,开发者需要熟悉其架构、系统组件、系统服务等方面的知识,以便更好地进行应用开发。
2.2 Linux操作系统Linux操作系统是Android操作系统的底层系统,开发者需要了解Linux 操作系统的基本原理和常用命令,以便进行系统管理和维护。
三、Android框架3.1 应用框架Android应用框架是Android应用开发的基础,开发者需要熟悉应用框架的各个组件和接口,以便更好地进行应用设计和开发。
3.2 组件化架构组件化架构是Android应用开发的一种常见架构,它可以将应用拆分为多个独立的模块,提高应用的模块化和可维护性。
四、UI设计4.1 XML布局XML布局是Android UI设计的主要方式之一,开发者需要熟练掌握XML 布局的语法和常用控件的使用方法。
4.2 样式和主题样式和主题是Android UI设计的重要工具,开发者需要了解如何使用样式和主题来统一应用的整体风格。
4.3 动画和过渡动画和过渡是提升用户体验的重要手段,开发者需要了解如何使用动画和过渡效果来增强应用的交互性。
五、数据库操作5.1 SQLite数据库SQLite数据库是Android平台上的轻量级关系型数据库,开发者需要熟练掌握SQLite数据库的创建、操作和维护方法。
5.2 ORM框架ORM框架可以简化数据库操作的开发工作,常见的Android ORM框架包括GreenDao、Realm等。
Android应用开发技术手册Android操作系统是目前世界上最流行的移动操作系统之一,它为开发人员提供了广泛的应用开发技术。
本技术手册将详细介绍Android应用开发的基本知识和技术要点,帮助开发人员快速入门并掌握Android应用开发技术。
一、Android应用开发概述1.1 Android应用开发简介Android应用是基于Java编程语言的移动应用程序,通过手机和平板电脑等Android设备来运行。
Android应用开发分为客户端应用开发和服务端应用开发两部分,本手册着重介绍客户端应用开发技术。
1.2 开发环境准备在开始Android应用开发之前,需要安装Java开发工具包(JDK)、Android Studio开发环境和Android设备或模拟器等工具。
二、Android应用开发基础2.1 Android应用架构Android应用采用四层架构,包括应用层、应用框架层、核心库层和Linux内核层。
开发人员需要了解Android应用架构,明确各层的功能和作用。
2.2 Android应用组件Android应用采用组件化的开发方式,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)等组件。
开发人员需要熟悉各个组件的使用方法和生命周期。
2.3 用户界面设计Android应用的用户界面设计采用XML布局文件和Java代码相结合的方式,开发人员需要了解XML布局文件的基本语法和常用的布局方式,以及如何通过Java代码来控制界面的交互和响应。
三、Android应用开发进阶3.1 数据存储与管理Android应用可以使用SQLite数据库、SharedPreferences和文件系统等方式来存储和管理数据。
开发人员需要学会如何使用这些数据存储方式,并了解它们的特点和适用场景。
3.2 网络通信与数据交互Android应用可以通过HTTP协议、Socket套接字等方式与网络进行通信,并进行数据的交互。
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扩充来实例化一个视图时被调用。