利用已掌握的编程语言和编程知識逆向分析和实现常见或流行的成熟应用产品,是培养需求分析和产品设计能力进行独立开发的重要方法,本书试图通过对各类常见應用产品的示例分析、拆解和实现引导AppInventor...
利用已掌握的编程语言和编程知识,逆向分析和实现常见或流行的成熟应用产品是培养需求分析和产品设计能力,进行独立开发的重要方法本书试图通过对各类常见应用产品的示例分析、拆解和实现,引导App Inventor初学者学会、掌握常规嘚产品设计思路和方法
高考专享特权 ?0扫码免费读此书,新用户再送20元代金券
具体目标是创建一个名为油漆桶嘚应用用户可以用不同的颜色在手机屏幕上绘画;然后改进功能,让用户用手机拍摄照片并在照片上进行绘画。
回顾历史早在20世纪70姩代,油漆桶这一类的绘画应用是最早运行在个人电脑上的应用之一目的是为了证明个人电脑的潜力。那时候开发这样一款简单的绘畫应用是一项极其复杂的工作,而且绘画效果也差强人意但现在,使用app inventor实例教程任何人都可以快速地创建一个有趣的绘画应用,这也囸是创建2D游戏的起点
如图2-1,油漆桶应用将实现下列目标:
登陆app inventor实例教程网站,创建一个名为“油漆桶”的新项目连接测试设备(或模拟器),为实时测试做好准备 在正式开始之前,在设计视图右侧的属性面板中将“Screen1”的标题属性修改为“油漆桶”。在测试设備上可以立即看到这一改变:应用的标题栏将显示“油漆桶” 这样做是否会导致项目名称与屏幕标题的混淆呢?别担心!在app inventor实例教程中囿三个非常重要名称:
油漆桶应用中将会用到以下组件:
首先按照以下提示创建三个颜色按钮:
注意:在项目中建议为组件起一个有意义的名称,洏不是像你好猫咪中那样采用默认的名称有意义的名称增加了程序的可读性,尤其是在切换到编程视图时将依据名称来区分不同的组件。本书中约定组件的命名方法:组件名称必须以组件类型结尾(如RedButton)
现在三个按钮排成一列纵队,我们希望它们能排成一行如图2-3所礻,使用水平布局组件来实现组件的水平排列:
此时查看组件列表你会发现三个按钮缩进排列在水平咘局组件之下,这表明三个按钮组件是水平布局组件的次一级组件同时注意到所有的组件都缩进排在Screen1之下。
你也可以让三个按钮在屏幕仩居中只要设定水平布局组件的水平对齐属性为“居中”即可。(建议将三个颜色按钮的字号属性改为20勾选粗体属性,并将红、蓝两個按钮的文本颜色属性改为白色以便于查看。——译者注)
通常利用布局组件来创建简单的垂直、水平或表格布局不过,也可以通过逐层嵌套布局组件的方式来创建更加复杂的布局
下面对画布组件进行设置,具体步骤如下:
到此为止应用外观已经设置完成,如图2-5所示
下一步将定义组件的行為。编写一个绘画程序的难度似乎是难以想象的但无疑app inventor实例教程已经承担了大部分繁重的工作:借助于简单易用的块语言, 不仅可以处悝用户的触摸及拖动事件也可以实现绘画及拍照功能。
在设计视图中已经添加了叫做“画布”的画布组件,画布组件可以侦测到触摸忣拖动事件对触摸事件编程,来实现画圆功能当用户的手指触摸到画布时,将在被触摸的位置画上一个圆形;对拖动事件编程可以實现画线功能,即当用户的手指在画布上划过时,沿途会画出一条线还可以通过对按钮的点击事件编程,来改变画笔的颜色、大小、清除画布以将画布的背景图片修改为相机拍摄到的照片
首先处理触摸事件:当用户触摸画布时,在接触点绘制一个圆形:
(1) 在编程视图中打开画布的代码块抽屉,拖出“当画布被触摸时”块该代码块有三个参数:x坐标、y坐标及碰到任意精灵,如图2-6所示其中的x、y坐标提供了接触点的位置信息。
提示:在第一章你好猫咪的应用中我们已经熟悉了按钮点击事件,但对于画咘组件的事件还很陌生按钮点击事件的很简单,不附带任何其他信息;但有些事件则不然它们附带了与事件有关的“参数”信息。在畫布的触摸事件中提供了触摸点在画布上的x、y坐标,以及是否碰到了位于画布中的对象(在App Inventor中被称作“精灵”)但是在第三章之前我們还不需要使用碰到任意精灵参数。本章我们只用到了触碰点的坐标利用坐标来绘制圆形。
(2) 从画布的代码块抽屉中拖出“让画布画圆”塊放在画布的触摸事件处理程序中,如图2-7所示;
在“让画布画圆”块的右侧有四个插槽其中的前三个插槽需要填入参数:圆心x坐标、圆心y坐标、半径,其中圆心x、y坐标用于指定绘制圆形的位置半径用于指定圆的大小。图中的代码有些令人困惑有两组x、y坐标,这里要区分清楚:触摸事件中的x、y坐标表示接触点的位置(已知);而画圆命令块中的x、y坐标插槽用于设定绘制圓形的圆心位置(待定)。我们恰好要以用户的触摸点为圆心绘制圆形因此可以从触摸事件中取得x、y坐标的值,作为画圆命令的参数填充到代码块的插槽中。(“让画布画圆”块中的第四个插槽是最近的版本中新增加的参数——实心它的默认值是“真”,表示将绘制實心圆如果设为假,将绘制空心圆——译者注)
提示:可以从触摸事件块中提取事件的参数,方法是将鼠标悬停在参数上如图2-8所示。
(3) 从事件中拖出“x坐标”、“y坐标”块,并将它们填充到画圆命令块的插槽中如图2-9所礻。
(4) 现在需要设定圆的半径,半径的单位为像素像素是显示屏幕上所能绘制的最小的點,此时设半径为5个像素:在编程视图工作区的空白处输入数字5再按回车,将会自动创建一个数字块将数字块5拖入半径插槽。当数字塊5填入到半径插槽后屏幕左下角的黄色三角形处的数字变为0,因为此时所有的插槽都已经被填满。如图2-10就是完整的触摸事件处理程序
提示:在编程视图的工作区中输入5然后回车,这种操作叫做输入块(typeblocking)系统会根据你输入的字符,显示与该字符相匹配的一系列块;洳果输入的是数字那么将创建一个数字块。
下面添加拖动事件处理程序,先看一下触摸事件与拖动事件之间的区别:
在绘画程序中手指在屏幕上拖动,沿着手指移动的路径将绘制出一条线,而这条线实际上是由无数个微小的直线(线段)构成:手指每次微小的移动都将从手指所在的最后一个位置开始,到手指的当前位置为止绘制一个微小的线段。
(1) 從画布的代码块抽屉中拖出拖动事件处理程序块如图2-11所示;拖动事件携带了以下参数:
(2) 从画布的代码块抽屉中拖出“让画布画线”块填充到拖动事件块中,如图2-12所示
(3) 画线命令块有四个参數,分别确定微小线段的起点及终点坐标其中起点为(第一点X坐标,第一点Y坐标)终点为(第二点X坐标,第二点Y坐标)你能确定每個参数中需要填入什么值吗?记住当手指在画布上拖动时,拖动事件将被调用了很多次:在应用中手指的每次微小的移动都会绘制出┅个微小线段,从(邻点X坐标, 邻点Y坐标)到(当前X坐标, 当前Y坐标)
(4) 从拖动事件中拖出你需要的参数,将邻点X坐标、邻点Y坐标分别填充到苐一点x坐标、第一点y坐标中然后,将当前X坐标、当前Y坐标分别填充到第二点x坐标、第二点y坐标中如图2-13所示。
应用已经实现了画线功能,但现在只能画红线下面编写颜色按钮的事件处理程序,以便用户可以改变画笔嘚颜色;同样设置擦除按钮程序以便用户可以清除画布并重新开始。 在编程视图中完成以下操作:
app inventor实例教程应用可以调用安卓设备嘚强大功能包括相机功能。为了增加应用的趣味性用户可以打开相机拍摄照片,并将照片设置为画布的背景
照相机组件有两个关键嘚代码块:“让照相机拍摄照片”块用来启动设备上的拍照程序;拍照完成时将触发“照相机完成拍摄”事件。在完成拍摄事件处理程序Φ可以将刚刚拍摄的照片设置为画布的背景图片。1. 打开拍照按钮的代码块抽屉并拖出按钮点击事件块;2. 从照相机1的抽屉中拖出“让照相機1拍摄照片”块放在拍照按钮的点击事件处理程序中;3. 从照相机1的抽屉中拖出完成拍摄事件块;4. 从画布抽屉中拖出“设画布的背景图片”块,放在照相机1拍摄完成事件处理程序中;5. 照相机1拍摄完成事件中有一个名为“图片地址”的参数代表刚刚拍摄完成的照片,从事件塊中取出“图片地址”块并填充到“设画布的背景图片”块的插槽中。所有的代码块如图2-15所示
茬画布上画圆时,圆的大小取决于画圆命令中的半径参数现在半径的值是5,如果想改变圆的大小需要为半径设置不同的值。试试看将此前的5改为10然后在测试设备上观察结果。
但问题是无论开发者如何设置半径参数,应用的用户都只能用某个固定的尺寸画圆如何让鼡户来改变圆的大小呢?为此我们来修改程序:当用户点击大圆按钮时圆的半径设为8,当点击小圆按钮时半径设为2
我们要用不同的半徑画圆,但应用如何知道我们要用哪个值呢必须通知应用我们选定的值,而应用必须以某种方式记住(或保存)这个值这样才能在需偠的时候使用这个值。之前我们所使用的值要么设定为组件的属性(如画布的画笔颜色),要么用固定的数字块(如数字5)现在应用需要记住一些属性之外的、不是固定不变的东西,这就需要定义一个变量变量是一个存储单元,可以把它想象成一个容器里面存储着鈳变的数据,如画笔的大小(有关变量的详细信息请参见本书第16章)。
让我们先来定义一个变量“画筆宽度”:
下一步我們要修改画布的触摸事件处理程序,将其中画圆命令中的半径参数由原来的固定值替换为变量画笔宽度(乍一看我们使用的半径参数还昰预先设定的固定值2,并非一个可变值不过别急,稍后我们将改变画笔宽度的值因此也就改变了所画圆的大小。)
现在应用将根据画笔宽度的值,来决定绘制圆的大小不过,画笔宽度既然是变量就要依据用户的选择进行改变。 通过编写小圓按钮及大圆按钮的点击事件处理程序来实现此功能:
(1) 从小圆按钮的抽屉中拖出点击事件处理程序;再从变量抽屉中拖出第三个块——“設()为”块点击小倒三角形周围区域打开下拉列表(此时只有一项),选择“global 画笔宽度”并将其填充到小圆按钮点击事件中;最后,创建一个数字块“2”并将其填充到“设 global 画笔宽度”块中。
(2) 创建另一个类似的大圆按钮点击事件处理程序设置画笔宽度为8。这两个事件处理程序显示在编程视图中如图2-19所示。
提示: “设global 画笔宽度”中的“global”(全局)指的是该变量适用于程序中所有的事件处理程序因此被称为全局变量,与全局变量相对应的是局部变量适用于程序的特定部分(详见第21章)。
图2-20中列出了应用中的全部代码。