1.5 为组件添加行为
此前我们已经为应用添加了按钮、标签及音效播放器组件,但它们只是构成应用的“硬件”。现在我们来为这些“硬件”编写必要的“软件”。首先,当触摸按钮时,让应用发出猫叫声。这些工作需要在编程视图中完成,点击设计视图右上角的“编程”按钮,切换到编程视图。
留心观察编程视图,这里将是你向组件下达指令的地方,让它们做什么,何时做,都将在这里实现。眼下,你将命令猫咪按钮,在被触碰(点击)时,发出猫叫声。如果把组件比作菜谱的食材,那么即将使用的代码块就是烹调一道菜的具体步骤。
1.5.1 让猫发出叫声
在编程视图窗口的左侧、“代码块”标题下面,你可以看到三个大的代码块分组:内置块、Screen1以及任意组件。其中Screen1分组中列出了这个应用中的全部组件:按钮1、标签1以及音效播放器1。点击其中任何一个组件的名称,将打开该组件的代码块抽屉,你将看到一组隶属于该组件的可选代码块。点击按钮1,打开按钮1的代码块抽屉,将看到与按钮1有关的代码块,可以用它们来设置按钮的行为。最上面的代码块是“当按钮1被点击时”,如图1-9所示。
图1-9 点击按钮1显示该组件的代码块
点击代码块“当按钮1被点击时”,代码块将落在工作区内。注意代码块上的文字“当”,那些包含了“当”字的黄色的代码块被称为“事件处理程序”,用来定义某个特定事件发生时,应用中组件的行为。在这个例子中,我们感兴趣的事件发生在用户点击猫咪图片时(实际上点击的是按钮),如图1-10所示。接下来,我们将在这个程序中添加一些块,来响应这个点击事件。
图1-10 在事件处理程序中设置对点击事件的响应
点击“音效播放器1”打开代码块抽屉,找到并拖出“让音效播放器1播放”块。(记得吗,我们之前将音效播放器1的源文件属性设置为加载到项目中的文件meow.mp3。)此时,你可能已经注意到,“让音效播放器1播放”块在外形上刚好与按钮1的点击事件块相吻合。这是App Inventor的特别设计,以便只有那些相匹配的块才能连接到一起。在这个例子中,包含“让”字的块用来引发组件的行为,与点击事件块连接到一起,共同构成一个整体。如图1-11所示,当两个块连接到一起时,会发出一个清脆的“咔哒”声。
图1-11 这时如果点击按钮,将发出猫叫声
不同于传统的程序代码(通常像混乱的“天书”一般),在App Inventor中,使用事件响应块,以一种简单明了的方式拼出组件的行为。在本例中,我们相当于直接说:“嘿,App Inventor,当有人点击猫咪按钮时,播放猫叫声。”
测试:检查一下,确保一切运行正常。每当为应用添加了新的功能,就要及时进行测试,这一点非常重要。在测试设备上点击按钮(或在模拟器上单击它),你应该听到猫叫声。恭喜你,你的第一个应用运行起来了!
1.5.2 添加振动效果
当点击按钮时,让猫咪发出叫声,同时产生振动效果,这要借助于手机的振动功能来实现。这听起来很难,其实非常容易,因为用来播放猫叫声音的音效播放器组件也可以使设备产生振动。App Inventor可以帮助你挖掘设备的核心功能,而无需考虑这些功能(如振动)是如何实现的。现在,不必在设计视图中做任何改动,只需在编程视图中,向按钮点击事件块中添加另一个功能。
(1)在编程视图中,单击音效播放器1,打开其代码块抽屉。
(2)选择“让音效播放器1振动”块,将其拖动到“当按钮1被点击”块中,置于“让音效播放器1播放”块下方,恰好与原来的块吻合,如图1-12所示。如果不吻合,可尝试拖动它,使振动块顶部的凹陷恰好与播放块底部的凸起相对。
图1-12 在按钮点击事件中播放声音并产生振动
(3)注意:在“让音效播放器1振动”块的右下角写着“参数:毫秒数”字样,并且旁边还有一个开放的插槽。这种开放的插槽表示需要填入其他块,来设定行为的具体方式。本例中,开放插槽用于设定振动的时长——毫秒数。毫秒是多数编程语言中惯用的时间单位,1秒=1000毫秒。如果想让设备振动半秒钟,需要输入数字块“500”。打开内置块分组中的数学抽屉,会看到一列蓝色的代码块,如图1-13所示。
图1-13 打开数学块抽屉
(4)在数学块列表顶部,是数字块“0”。拖出该块,可以将0改写为需要的数字,如图1-14所示。
图1-14 选择数字块0(0为数字块的默认值)
(5)选中数字0,并输入新的值500,如图1-15所示。
图1-15 将数值改写为500
(6)将数字块500拖到振动块的开放插槽中,如图1-16所示。
图1-16 将数字块500拖入毫秒数插槽
测试:试试看,点击设备上的按钮,你会感觉到半秒钟的振动。
1.5.3 摇晃设备
现在继续挖掘安卓设备的特色,为应用添加最后一项功能:摇晃设备时发出猫叫声。为此要用到加速度传感器组件,它可以检测到设备的摇晃或移动。
(1)在设计视图中,展开组件面板中的传感器分组,将加速度传感器组件拖入到预览窗口中。不必介意把它放在什么位置,因为像任何非可视组件一样,无论放在哪儿,它最终都会落到工作区域底部的“非可视组件”区。
(2)摇晃设备的事件需要与单击按钮事件分开处理。这意味着需要一个新的事件处理程序。进入编程视图,发现在代码块的Screen1分组中增加了一个加速度传感器1组件。打开其代码块抽屉,拖出“当加速度传感器1被晃动时”块(代码块抽屉中的第二个块)。
(3)像点击按钮时播放声音一样,将“让音效播放器1播放”块放在摇晃事件块的缺口中,摇动设备试试看。
图1-17中显示了完整的“你好猫咪”应用中的所用代码块。
图1-17 应用中的全部代码块