本节教程将继续带领大家完善教学demo

  • 导入项目
  • 完善主框架
  • 完成viewShower子视图
  • 打开新页
  • 启动动画

将要学习的demo效果图如下所示

1. 如何导入完整项目

本节示例demo请参考下载地址,可以导入到设计器中学习。

2. 完善主框架
在上一节教程搭建主框架中大家已经学会了如何主框架,本节教程使用上一节未完成的demo。

我们分析一下demo机构,通过点击Bottom Bar上的不同按钮来切换内容,这种情况下最适合用ViewShower这个组件,ViewShower是一个包含多个子VIew的UI容器组件。我们从组件列表里拖一个ViewShower到UI设计页面中,并通过调整x/y/width/height为0,0,750,1109将其固定在body的位置,把组件ID改为do_ViewShower_main。

双击index.ui.js打开代码编辑页面,先通过ID实例化ViewShower组件,再给ViewShower绑定数据,在DeviceOne的组件库中,ViewShower、ListView等这种容器类都是采用MVVM形式来绑定数据的,使得开发人员可以将View和业务逻辑分离出来。

这里先给ViewShower定义需要绑定的数据viewShower_data,其中id需要保持唯一,否则后id已经存在,会覆盖之前的View;path为需要展示的子View所在的UI页面的绝对路径,此时path所指的三个页面还不存在,一会来创建。定义好数据后,通过ViewShower的addViews方法将数据绑定进去,在调showView方法使其先默认显示第一个页面,即id为”news”的子页面。

想要完成每点击一个按钮就切换显示的子View,还需要在每个按钮的点击事件里加上切换子View的方法showView,并通过show不同id的子View来切换页面。

3. 完成viewShower子视图
接下来我们来完成需要展示的子View视图。

view目录上点击右键,选择New-Folder,填写要创建的目录名称为”news”,新建后再在news目录上点击右键,选择New-UI File新建名称为main的UI界面,在创建页面的同时IDE会同时创建一个跟main.ui关联的代码文件main.ui.js,双击打开main.ui文件,向页面的最外层ALayout中再拖进一个ALayout组件作为viewShower子View的最外层容器,修改它的id为do_ALayout_main,调整高度为1109,因为在主页面index.ui中viewShower的高度也为1109,如果子View的宽高超过它父容器viewShower的宽高会导致内容显示不全的问题

再向该页面的do_ALayout_main中拖拽一个Label,修改Label的text为“新闻”。这样viewShower的一个子View就完成了,其他两个子View也是相同内容,所以只需负责该页面即可,在news目录上点击右键,选择Copy,再点击View目录选择Paste,填写目录名为“find”,打开main.ui修改Label的text为“搜索”即可,同样的再复制、粘贴一次,修改目录名为“contact”、Label的text为“通讯录”,这样viewShower的三个子View就完成了。(再多复制一份,目录名改成“feedback”,Label的text为“反馈”,为后续做准备)

4. 打开新页
在Bottom Bar中,我们想通过点击第四个按钮“反馈”来另外打开一个新页面,让用户填写反馈信息。先双击打开feedback目录中的main.ui文件,在do_ALayout_main中继续添加一个ALayout作为该页面的top,ID改为do_ALayout_1,调整宽高分别为750/128;再向do_ALayout_1中添加一个ALayout用于点击,ID改为do_ALayout_back,调整位置、宽高分别为x=4,y=6,width=147,height=110;再向do_ALayout_back中添加一个Label用于展示文字,ID改为do_Label_3,将Label的text改为“返回”。

打开main.ui.js,订阅do_ALayout_back的点击事件用于关闭该页面。同时处理在点击android设备的虚拟返回按钮时也关闭该页面。

回到index.ui.js,在do_ALayout_b3的touch事件中调用app的openPage方法,将目标地址指向刚刚调整过的/feedback/main.ui页面,将顶部状态栏显示状态改为透明(控制statusBarState参数为“transparent”)以全屏形式打开新页,同时将打开页面的动画类型(animationType)改成从右往左推出(push_r2l)。

5. 启动动画
为了让app有更生动的效果,我们让demo一进入的时候有一个动画效果作为欢迎页面,在source://view下创建一个跟index.ui平级的start.ui页面,在根ALayout里添加一个与根ALayout一样大小的ImageView,将ID改为do_ImageView_content,给这个ImageView一个source显示图片;再添加一个Label组件,修改ID为do_Label_welcome,修改do_Label_welcome的fontColor/fontSize属性调整显示字体的颜色和大小,页面就完成了。再双击打开start.ui.js页面,

先实例化当前页面的UI组件,并定义需要使用到的相关组件,在定义一个MM组件animation用于调用UI组件的动画,这个动画是控制ImageView组件的,所以ID定义为img_anima,通过修改img_anima的属性,我们可以操控这个动画的走向,这里想让ImageView的动画是缩放,所以选择scale方法,通过给scale方法的不同参数以不同的参数值来制作这个动画,比如delay设置成0既是让动画立即开始,duration设置成2000是让整个动画时间为2秒等等..

接下来也是同样的方法给Label定义一个旋转的动画,最后通过调用所有UI组件都通用的animate方法我们将定义的这些动画加在UI组件上并在动画完成后打开新页main.ui。

到此,本节教程就结束了,赶快拿起手机打开调试来查看效果吧!

一个App完成入门篇(三)-完善主框架的更多相关文章

  1. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  2. 一个App完成入门篇(二)-搭建主框架

    通过第一课的学习,你已经掌握了如何通过debug调试器来跟PC上的设计器联调来实时查看UI设计效果.调试代码了,接下来通过一系列的demo开发教学你将很快上手学习到如何开发一个真正的App. 要开发A ...

  3. 一个App完成入门篇(五)- 完成新闻页面

    本节教程将介绍如何用DeviceOne简单而高效的完成一个新闻页面. 导入项目 数据模板分离MVVM模型 自定义事件 展示新闻 九宫格展示 将要学习的demo效果图如下所示 1. 导入完整项目 本节示 ...

  4. 一个App完成入门篇-终结篇(八)- 应用收官

    经过以上几步的学习,我们终于来到最后一个步骤了,应用APP也接近尾声. 通过之前的几节教程,不知道您对使用DeviceOne开发一个应用是不是已经得心应手了,本节教程将教会大家如何在开发完成之后通过D ...

  5. 一个App完成入门篇(六)- 完成通讯录页面

    第五章和第六章间隔时间有点长,对不起大家了.下面继续. 本节教程将要教会大家如何加载本地通讯录. 导入项目 导入通讯录 自定义js模块 发送和订阅page消息 将要学习的demo效果图如下所示 1. ...

  6. 一个App完成入门篇(四)- 完成反馈页面

    上一节中我们学会了如何通过点击不同按钮切换页面,这节专注于完成反馈页面的功能以及细节动画. 导入项目 添加新组件 同步新组件 完成页面布局 输入时加动画效果 弹出日期选择 直接引用UI页面 将要学习的 ...

  7. 一个App完成入门篇(一)-从Hello world开始

    程序员学习新技术都是通过Hello World开始的,我们也不例外.第一课我们简单了解利用do平台开发App的基本流程,能了解到的知识点是: 开发环境搭建 创建开发者账号 新建项目 拖拽一个组件 修改 ...

  8. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  9. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

随机推荐

  1. cmd运行的程序的工作目录

    如图所示,cmd通过输入自己编写的程序的实际路径,或者将程序放在环境变量中然后在cmd中执行,用start执行,该程序运行时的工作目录都是cmd当前所在目录:在cmd中输入该程序的快捷方式执行该程序, ...

  2. C1000k 新思路:用户态 TCP/IP 协议栈

    现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...

  3. 强大的Spring缓存技术(上)

    缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 ...

  4. Sql Server 日期查询

    当前月: USE [DBName] Go Use Database, Declare Variables DECLARE @ReportGenerationDate DATE DECLARE @Rep ...

  5. Hibernate查询

    HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...

  6. JSP内置对象有哪些呢?

    内置对象 request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的 ...

  7. (python)对象的引用

    对比下列两个例子: 例子1: a=10 b=a a=a+2 print "a=",a,"b=",b 结果:a= 12 b= 10 a+2后,b仍然是10 例子2 ...

  8. 检查或遍历android手机应程

    检查android手机中是否存在某应程 public boolean checkApp(String packageName) {        if (packageName == null || ...

  9. java 获取服务器 linux 服务器IP 信息

    public String getUnixLocalIp() { String ip = ""; try { Enumeration<?> e1 = (Enumerat ...

  10. javascript typeof

    https://zhidao.baidu.com/question/79159257.html typeof 运算符返回一个用来表示表达式的数据类型的字符串. 可能的字符串有:"number ...