搜档网
当前位置:搜档网 › 【Android开发Wiki】进阶篇使用自定义视图-Creating Custom Views(二):自定义绘制—Custom Drawing

【Android开发Wiki】进阶篇使用自定义视图-Creating Custom Views(二):自定义绘制—Custom Drawing

【Android开发Wiki】进阶篇使用自定义视图-Creating Custom Views(二):自定义绘制—Custom Drawing
【Android开发Wiki】进阶篇使用自定义视图-Creating Custom Views(二):自定义绘制—Custom Drawing

原文链接:

https://www.sodocs.net/doc/e812489758.html,/training/custom-views/custom-drawing.html

自定义视图最重要的部分是它的外观.你可以根据应用的需求简单或复杂的实现它. 这个教程包含了最常见的操作.

重写onDraw()

绘制自定义视图里最重要的一步是重写onDraw()方法. onDraw()的参数是视图可以用来绘制自己的Canvas对象. Canvas定义用来绘制文本、线条、位图和其他图像单元. 你可以在onDraw()里使用这些方法创建你的自定义用户界面(UI).

不过, 在你调用任何绘画的方法之前, 你必须创建Paint对象. 下一章节将会探讨Paint

的更多细节.

创建绘画对象

android.graphics框架把绘图分成了两部分:

?画什么, 由Canvas处理

?怎么画, 由Paint处理

例如, Canvas提供画线条的方法, 而Paint提供定义线条颜色的方法. Canvas提供画矩形的方法, 而Paint定义是否用颜色填充矩形或让它为空. 简而言之, Canvas定义你可以在屏幕上画的形状, 而Paint为你画的每个形状定义颜色、样式、字体等等.

所以, 在你画任何东西之前, 你需要创建一个或多个Paint对象. * PieChart_'(饼图)例子的'_init()* 方法里有这样的实现, 这个方法在构造函数里调用:

提前创建对象是一个很重要的优化. 视图频繁的被重画, 并且许多绘图对象初始化需要消

耗大量的资源. 在onDraw()方法里创建绘图对象会严重降低性能, 并可以让你的UI显得有

些迟钝.

处理布局事件

为了正确的绘制你的自定义视图, 你需要知道它的大小. 复杂的自定义视图经常需要根据它的大小和在屏幕上的图形区域执行多次布局计算. 你永远不应该假设视图在屏上的大小.即使只有一个应用使用你的视图, 应用也需要处理不同的屏幕尺寸, 多种屏幕分辨率, 以及在横屏和竖屏模式下的各种高宽比.

虽然View有很多处理尺寸大小的方法, 但是大部分的需要重写. 如果你的视图不需要特别控制它的大小, 你只需要重写方法: onSizeChanged() .

onSizeChanged()在你的视图第一次分配大小的时候调用, 如果你的视图因为任何原因改变了大小也会再次调用. 在该方法里计算位置、大小和其他一些与视图大小相关的值, 而不是你每次绘制的时候重新计算. 在PieChart(饼图)例子里, PieChar视图在onSizeChanged()里计算饼图的图形边界、文本标签的相对位置和其他视觉元素.

当你的视图分配了一个大小, 布局管理器会假设这个大小包含了所有视图的padding值. 你必须在计算你视图的大小的时候处理padding值. 下面是PieChart.onSizeChanged()中处理这个的代码片段:

如果你需要出色的控制你视图的布局参数, 实现[int) onMeasure()](http://docs.eoeand https://www.sodocs.net/doc/e812489758.html,/reference/android/view/View.html#onMeasure(int,)方法. 这个方法的参数是View.MeasureSpec值, 这个会告诉你你的视图的父元素想让你的视图有多大, 并且告诉你这个大小是否是最大值或只是一个建议. 作为优化, 这些值保存为整数的封装类型, 你可以用View.MeasureSpec里的静态方法解析每个整数里面的信息.

下面是实现[int) onMeasure()](https://www.sodocs.net/doc/e812489758.html,/reference/android/view/ View.html#onMeasure(int,)的例子. 在这个实现里面, PieChart尝试让它的面积大小足以让饼图可以标签一样大:

在这段代码中有三个重点需要注意:

o计算需要考虑视图的padding. 如上所述, 这个是视图的职责.

?

o方法resolveSizeAndState()用来创建最终的宽和高. 这个方法通过比较视图的期望大小返回一个合适的View.MeasureSpec值传入int) onMeasure()

?

o onMeasure()方法没有返回值. 相反, 这个方法通过调用int) setMeasureDismension()方法传递结果. 调用这个方法是强制的. 如果你省略这个, View类会抛出runtime exception 绘图

一旦你有了创建的对象和定义了测绘布局的代码, 你可以实现方法onDraw(). 每个视图实现不同的onDraw(), 但是这里有些大多数视图常用的操作:

?使用drawText()画文本, setTypeface()指定字体, setColor()指定文本颜色

?画基本的形状用drawRect()、drawOval()、drawArc(). 不论改变图形的填充样式还是边框样式还是都修改, 都是调用setStyle()

?绘制复杂的形状用Path类. 通过给Path对象增加线条和曲线定义形状, 然后使用drawPat h()绘制形状. 就像基本的形状一样, Path可以设置填充样式、边框样式、或者都设置, 都依靠setStyle()

?定义渐变的填充样式通过创建LinearGradient对象. 在要填充的形状上通过调用setShade r()使用LinearGradient对象

?绘制位图使用drawBitmap().

例如, 这是是画PieChart的代码. 它混合使用了文本、线条、图形.

文章来源:https://www.sodocs.net/doc/e812489758.html,/page/Custom_Drawing

Android项目文档

课程代号:83308113 2014-2015学年第1学期《ISAS与项目训练(一)》 项目:Android 班级:网络2班 学号: 13734214 姓名:刘雨亭. 指导教师:温一军周洪斌 . 沙洲职业工学院 NIIT安艾艾迪

目录 一、系统简介 (3) 二、发展历程 (3) 三、发行版本 (4) 四、国内外手机应用状况 (4) 五、发展趋势 (5) 六、Android的相关技术介绍及分析 (6) 6.1、Android系统架构研究 (6) 6.2、应用程序框架 (7) 6.3、类库 (8) 七、Android的API (10) 八、Android活动的生命周期 (11)

一、系统简介 Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender 公司专门制作的称之为“Droid ”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。 二、发展历程 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。 2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发

android 自定义圆角头像以及使用declare-styleable进行配置属性解析

android 自定义圆角头像以及使用declare-styleable进行配置属性解析由于最新项目中正在检查UI是否与效果图匹配,结果关于联系人模块给的默认图片是四角稍带弧度的圆角,而我们截取的图片是正方形的,现在要给应用统一替换。应用中既用到大圆角头像(即整个头像是圆的)又用到四角稍带弧度的圆角头像,封装一下以便重用。以下直接见代码 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package com.test.demo; import com.test.demo.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.widget.ImageView; /** * 圆角imageview */ public class RoundImageView extends ImageView { private static final String TAG = "RoundImageView"; /** * 图片的类型,圆形or圆角 */ private int type; public static final int TYPE_CIRCLE = 0; public static final int TYPE_ROUND = 1; /** * 圆角大小的默认值

Wiki笔记(MediaWiki安装流程)

Wiki ●基本概念:Wiki源自夏威夷语的“WikiWiki”,本意是“快点快点”,翻译为 维客、围纪、快纪、共笔、维基等。Wiki是一种在网络上开放、可供多人协同创作的超文本系统,由沃德-坎宁安于1995年首先开发,他将Wiki定义为“一种允许一群用户通过简单的标记语言来创建和连接一组网页的社会计算机”。 ●基本功能:Wiki包含一套能简易制作、修改HTML网页的系统,它允许 任何造访他的人快速轻易的添加、删除、编辑所有内容。 ●Wiki引擎: ?概念:就是Wiki软件,用来架设Wiki网站的软件 ?常用Wiki引擎介绍: ◆ASP的WiKi程序。ASP的WiKi程序总体感觉比较弱,或许开放的WiKi更喜欢开放的linux系统吧 1,Operator Wiki 0.3 语言环境:ASP+ACCESS 官方主页:https://www.sodocs.net/doc/e812489758.html,/projects/operatorwiki/ 演示:https://www.sodocs.net/doc/e812489758.html,/maxzone/operatorwiki/wiki.asp 下载:https://www.sodocs.net/doc/e812489758.html,/codepubcom/2006/4/8/operatorwik03.rar 介绍:免费开源的国产WIKI程序,ASP+JavaScript写的Wiki 引擎,支持多语言、ACL,综合各种WIKI 的功能。 Operator Wiki 升级日志0.3:. * 完整的用户权限 * 支持ACL 进行权限控制 * 修正了一个标记冲突问题 * 修正登录问题 * 源代码采用Tab 代替空格,进一步缩小体积,主程序目前仅34.4K * 更良好的多语言支持 * 修正数十个关于表格和列表的问题 2,OpenWiki 中文版Build20060328 语言环境:ASP+ACCESS/SQLServer 官方主页:https://www.sodocs.net/doc/e812489758.html,/ 演示:https://www.sodocs.net/doc/e812489758.html,/yow/ 下载:https://www.sodocs.net/doc/e812489758.html,/codepubcom/2006/4/8/openviki_yow.rar 介绍:国外的一个ASP Wiki程序,3d-gis汉化。 3, JsWiki - 开源ASP WIKI程序 语言环境:ASP 官方主页:https://www.sodocs.net/doc/e812489758.html,/projects/jswiki/ 演示:https://www.sodocs.net/doc/e812489758.html,/ 下载:https://www.sodocs.net/doc/e812489758.html,/codepubcom/2006/2/10/jswiki.rar

Linux Wine完全使用指南——从基本到高级

Wine完全使用指南——从基本到高级 关键字: wine 使用 一直苦于没有一篇像样的使用指南,原来外国有朋友跟我有同感,既然他捷足先登了,那我只好翻译了。 原文作者说会保持更新,这篇文章是很新的,介绍了很多实用的Wine设置方法,非常全面,无论新手还是老鸟都值得一读。 原文: https://www.sodocs.net/doc/e812489758.html,/doku.php/wine:winestuff 我收集到的关于Wine的一些资料 如果你像我一样的话,当你第一次使用Wine的时候,就会被Wine的帮助文章现状所困扰。互联网上确实有很多的HOWTO文章来教你使用一些程序或游戏,但是我找不到一个全面的“Wine初学者教程”来让我真正懂得实际了解和使用Wine所需的基本知识。我不需要一个教我如何运行半条命2的文章,我需要的是一篇能实实在在教我怎样使用Wine的文章。最后,我整理了从众多的Wiki、指南、帖子和HOWTO搜集来的资料,写成这篇文章。虽然这篇文章主要针对在Wine下运行游戏,但是它包括的几乎所有的信息都可以应用到用Wine来运行其它的程序。 一般资料 “winecfg”的使用资料 特殊配置资料 安装资料 一般使用资料 第三方软件资料 高级设置资料 1一般资料 1.1Wine is not an emulator 这个我就不翻译了,没有多少技术介绍。 1.2使用最新的Wine 记住最新版的Wine会包含一些旧版本里没有的bug。在feisty的软件仓库里包含了0.9.33,而最新的Wine是0.9.44(我翻译文章时)。0.9.33更加稳定,但是最新的版本包含重大的DirectX改进。有一些不能在0.9.33下运行的游戏能够在0.9.44中很好地运行。在使用0.9.37到0.9.40之间的某些版本运行KotOR2时,声音在我的系统上崩溃了。那是最好的有关使用最新版导致棘手问

android studio 控件常用属性

android studio 控件常用属性 下面是RelativeLayout各个属性 1.android:layout_above="@id/xxx" --将控件置于给定ID控件之上 2.android:layout_below="@id/xxx" --将控件置于给定ID控件之下 3. android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐 4.android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定ID控件的右边缘对齐 5. android:layout_alignLeft="@id/xxx" --将控件的左边缘和给定ID控件的左边缘对齐 6.android:layout_alignTop="@id/xxx" --将控件的上边缘和给定ID控件的上边缘对齐 7.android:layout_alignRight="@id/xxx" --将控件的右边缘和给定ID控件的右边缘对齐 8.android:layout_alignBottom="@id/xxx" --将控件的底边缘和给定ID控件的底边缘对齐 9.android:layout_alignParentLeft="true" --将控件的左边缘和父控件的左边缘对齐 10. android:layout_alignParentTop="true" --将控件的上边缘和父控件的上边缘对齐 11. android:layout_alignParentRight="true" --将控件的右边缘和父控件的右边缘对齐 12.android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐 13.android:layout_centerInParent="true" --将控件置于父控件的中心位置 14.android:layout_centerHorizontal="true" --将控件置于水平方向的中心位置 15.android:layout_centerVertical="true" --将控件置于垂直方向的中心位置 android:layout_width 设置组件的宽度 android:layout_height 设置组件的高度 android:id 给组件定义一个id值,供后期使用 android:background 设置组件的背景颜色或背景图片 android:text 设置组件的显示文字 android:textColor 设置组件的显示文字的颜色 android:layout_below 组件在参考组件的下面 android:alignTop 同指定组件的顶平行

Android平台我的日记设计文档

Android平台我的日记 设计文档 项目名称:mydiray 项目结构示意: 阶段任务名称(一)布局的设计 开始时间: 结束时间: 设计者: 梁凌旭 一、本次任务完成的功能 1、各控件的显示 二、最终功能及效果 三、涉及知识点介绍 四、代码设计 activity_main.xml:

android:layout_centerHorizontal="true" android:layout_marginTop="88dp" android:text="@string/wo" android:textSize="35sp"/>