`
rensanning
  • 浏览: 3553257 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38227
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607654
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682838
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89566
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402165
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69772
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91862
社区版块
存档分类
最新评论

使用Titanium来开发“Path”的一些创新UI布局 - 左右菜单

阅读更多
“Path”是appstore中的一个流行应用,由于一些超有创意的UI布局设计,竞相被很多应用模仿。

App Sotre :这里



首先我们先做一下这个左右菜单的效果!



左边是主菜单,右边是好友一览,能偶添加,修改,删除好友。
左边的菜单中,点击各个选项的时候,在中间的View中显示页面。右边的菜单项目点击后,迁移到其他页面。

大体上就是这么功能,那我们看看需要做多少个View:
1、初期表示的ContentView1
2、左边主菜单点击后能够显示的ContentView2
3、右边的菜单(好友一览)
4、左边的菜单(主菜单)

在初期状态下个View的重叠顺序(zIndex)顺序依次是:ContentView1、左菜单,右菜单,ContentView2.

知道了大体的页面结构后,我们开始编写代码。

1、一开始我们需要定义tab,window等变量。
Titanium.UI.setBackgroundColor('#000');
var tabGroup = Titanium.UI.createTabGroup();
var win = Titanium.UI.createWindow();
// 隐藏TabBar
win.hideTabBar();
// 隐藏navBar
win.navBarHidden = true;
var tab = Titanium.UI.createTab({window: win});


和“Path”应用相同,页面TabBar和NavBar。

2、创建各个View
var rightView = Ti.UI.createView({
 left: 0,
 width: 320,
  showed: false,
});
win.add(rightView);
var leftView = Ti.UI.createView({
  left: 0,
  width: 320,
  showed: false,
});
win.add(leftView);

这里特别重要的地方是:left: 0 和 width: 320。
也要特别注意left和right的同时使用是很不好的,页面的表示会很奇怪,可能是Titanium不完善吧。

这里view当中设置了一般属性以外的一个值:showed: false。这个值将会用在我们以后表示或隐藏该View的标志。

3、定义ContentView
主菜单中我们定义一下:主页,Baruth,退出。点击退出时需要表示Dialog所以需要再定义2个View。

var baruthView = Ti.UI.createView({
  backgroundColor: "#3333aa",
  left: 320,
  width: 320,
  zIndex: Z_INDEX_BOTTOM,  // 0
});
win.add(baruthView);
var topView = Ti.UI.createView({
  backgroundColor: "#aa3333",
  left: 0,
  width: 320,
  zIndex: Z_INDEX_TOP, // 3
});
win.add(topView);
currentShowView = topView;


BaruthView的Left为320,所以在隐藏的Contentview的页面下。这里还有一些要说明的变量。首先Z_INDEX_BOTTOM 和 Z_INDEX_TOP,它们是用来定义zIndex的常量一个最长层,一个最下层。currentShowView是全局的用来表示ContentVide的变量。

在2个ContentView当中,为了显示左右菜单需要定义button,2个View中都是同样动作的button,所以我们抽象出来一下函数:

function createRightButton(){
  var button = Ti.UI.createButton({
    top: 7,
    right: 5,
    width: 40,
    height: 31,
    title: "R",
  });
  button.addEventListener("click", function(e){
    switchFriendList(e.source);
  });
  return button;
}
function createLeftButton(){
  var button = Ti.UI.createButton({
    top: 7,
    left: 5,
    width: 40,
    height: 31,
    title: "L",
  });
  button.addEventListener("click", function(e){
    switchMainMenu(e.source);
  });
  return button;
}


button 的 click 事件中我们调用了几个定义的函数,大体上这几个函数的内容是:

function switchFriendList(button){
  rightView.showed = ! rightView.showed;
  leftView.zIndex = rightView.zIndex - 1;
  var left = rightView.showed ? -290 : 0;
  var animation = Ti.UI.createAnimation({left: left, duration: 350});
  currentShowView.animate(animation);
}
function switchMainMenu(button){
  leftView.showed = ! leftView.showed;
  rightView.zIndex = leftView.zIndex - 1;
  var left = leftView.showed ? 290 : 0;
  var animation = Ti.UI.createAnimation({left: left, duration: 350});
  currentShowView.animate(animation);
}


从动作上来说两个基本差不多。

rightView.showed = ! rightView.showed;


这里的处理是当为true的时候设为false,false的时候设置为true.

leftView.zIndex = rightView.zIndex - 1;

左边菜单的zIndex中设置成右边菜单的zIndex -1后,将会在右边菜单的上层表示。然后,菜单的表示位置中left的值通过三元运算符设定。

调用这个函数的button准备好后,通过做成button的函数做成button追加到ContentView中去。

// 右按钮
var r1 = createRightButton();
topView.add(r1);
var r2 = createRightButton();
baruthView.add(r2);

// 左按钮
var l1 = createLeftButton();
topView.add(l1);
var l2 = createLeftButton();
baruthView.add(l2);


4、做成主菜单TableView

function switchCurrentView(nextShowView){
 leftView.showed = false;
  var beHidden = Ti.UI.createAnimation({left: 320, duration: 300});
  beHidden.addEventListener("complete", function() {
    currentShowView.hide();
    currentShowView.zIndex = Z_INDEX_BOTTOM;
    nextShowView.show();
    nextShowView.zIndex = Z_INDEX_TOP;
    var beShown =  Ti.UI.createAnimation({left: 0, duration: 350});
    nextShowView.animate(beShown);
    currentShowView = nextShowView;
  });
  currentShowView.animate(beHidden);
}


这部分代码读起来比较费劲,主要是切换ContentView。通过hide(),show()把现在显示的Contentview和即将想表示出来的ContentView,进行切换。切换的过程伴随着动画。

var mainMenu = Ti.UI.createTableView({
  data: [
    {header: "astronaughts", title: "Home"},
    {title: "Baruth"},
    {title: "退出"},
  ],
  left: 0,
  width: 320,
});
leftView.add(mainMenu);
mainMenu.addEventListener("click", function(e){
  switch(e.index){
    case 0:
      switchCurrentView(topView);
      break;
  case 1:
      switchCurrentView(baruthView);
      break;
  case 2:
      break;
  }
});



到这里代码都很简单,定义一个TableView,然后追加View,在click事件中调用刚才定义的函数。

下边定义好友一览的Tableview.

var friendList = Ti.UI.createTableView({
  data: [
    {title: "添加好友", hasChild: true},
    {header: "3人", title: "sss", hasChild: true},
    {title: "ppp", hasChild: true},
    {title: "mmm", hasChild: true},
  ],
  left: 30,
  width: 290,
});
rightView.add(friendList);


好友一览的TableView很简单,更上边相比只是变了变量名而已。

friendList.addEventListener("click", function(e){
  var friendWin = Ti.UI.createWindow({
    backgroundColor: "#123456"
  });
  var backButton = Ti.UI.createButton({
    top: 7,
    left: 5,
    width: 40,
    height: 31,
    title: "B",
  });
  friendWin.add(backButton);
  backButton.addEventListener("click", function(){
    friendWin.close();
  });
  friendWin.addEventListener("open", function(){
    setTimeout(function(){
 leftView.hide(); rightView.hide();
      rightView.showed = false;
      currentShowView.left = 0;
    }, 500);
  });
  friendWin.addEventListener("close", function(){
    leftView.show(); rightView.show();
  });
  tab.open(friendWin, {animated:true});
});


按下好友一览的代码部分中,代码有些杂七杂八的。

定义window然后表示,再做一个返回按钮等。

window 在 open 之后, 使用的setTimeout函数功能比较微妙。他是在window从右滑动过来的动画结束后吧左右菜单隐藏,然后把ContentView显示在中间位置的功能。这样一览,在 window关闭后,跳过好友一览的心事而能很炫的把ContentView显示出来。close事件中只是做了一下隐藏处理。

细节的地方可能说的不够详细,大家可以看看完整的代码。

完整的代码:app.js

  • 大小: 46.1 KB
  • 大小: 40 KB
  • app.zip (1.5 KB)
  • 下载次数: 115
0
1
分享到:
评论

相关推荐

    创新Sound Blaster X-Fi Titanium系列声卡驱动 v2.40.0008 官方最新版

    titaniumhd声卡驱动是由创新官方为创新SoundBlasterX-FiTitanium系列推出的一款驱动程序,适合电脑声音有异常的用户来使用,欢迎喜爱的朋友下载使用!官方介绍titaniumhd声卡驱动是创新近期发布的一款适用于...

    Titanium中文版开发手册

    **Titanium中文版开发手册** Titanium中文版开发手册是一份专门为中文用户编译的开发者指南,旨在帮助熟悉中文的开发者充分利用Titanium框架进行移动应用的开发。Titanium是一个开源的JavaScript平台,允许开发者...

    Atom-atom-appcelerator-titanium,用于atom文本编辑器的appcelerator开发工具和ui包.zip

    这个"atom-appcelerator-titanium-master"文件夹可能包含了与Atom集成的Titanium插件,使得在Atom中编写和调试Titanium应用程序变得更加便捷。 这个插件可能提供的功能包括: 1. **语法高亮**:对JavaScript、XML...

    TITANIUM智能手机应用开发教程

    **TITANIUM系统**是一种基于云的移动应用程序开发平台,它支持跨平台开发,允许开发者使用JavaScript来编写原生移动应用程序。TITANIUM的主要特点包括: - **跨平台兼容性**:通过一次编写代码即可在多个平台上运行...

    Titanium使用JavaScript来开发原生iOSAndroid和Windows应用

    Titanium是一个开源的移动开发框架,它允许开发者使用JavaScript语言来构建原生的iOS、Android以及Windows应用程序。这个框架的核心理念是提供一个跨平台的解决方案,让开发者可以用一种语言编写代码,然后在多个...

    前端开源库-node-titanium-sdk

    在实际开发过程中,使用`node-titanium-sdk`时,开发者需要熟悉Titanium的API,理解如何通过JavaScript代码调用这些API来实现原生功能。同时,还需要掌握基本的移动应用设计原则,以确保应用在不同平台上拥有良好的...

    orchestrator-powershell:UiPath Orchestrator PowerShell cmdlet 库

    UiPath Orchestrator PowerShell 库 用于与交互的 PowerShell 库。 PS C:\ > Install-PackageProvider - Name NuGet - Force ...使用交互式登录登录 UiPath Automation Cloud PS C:\>Get-UiPathAuth

    Titanium plugin开发初探

    在移动应用开发领域,Titanium 是一个流行的选择,它允许开发者使用 JavaScript 来构建原生的 iOS 和 Android 应用。Titanium 的核心理念是通过跨平台的 JavaScript API 提供与原生功能的无缝对接,而插件开发则是这...

    titanium-appcelerator-pull-to-refresh, 在your中,创建"pull to refresh" 视图的JavaScript方法.zip

    titanium-appcelerator-pull-to-refresh, 在your中,创建"pull to refresh" 视图的JavaScript方法 什么?这种方法,将帮助你在你的篓中制作视图"拖到刷新"。?要使用这里方法,你需要将这些文件包含在项目中:Ti....

    通过Titanium将Metro UI移植到iOS/Android的“ TiMetro”

    "TiMetro"是一个创新项目,它允许开发者使用Titanium框架将流行的Microsoft Metro UI设计风格移植到iOS和Android平台上。这个项目对于那些希望在多种移动操作系统上实现统一视觉体验的开发者来说,具有重大意义。让...

    Atom-Titanium-Build,钛菜单原子运行,包装等。对Hazemkhaled/钛合金有贡献.zip

    Atom-Titanium-Build.zip,钛菜单到Atom,包括Run、Package等这个项目已不在积极开发之中。自从@appcelerator为atom发布了令人敬畏的官方软件包以来,包括调试、构建等等。,atom是一个用web技术构建的开源文本编辑器...

    Titanium Mobile SDK 3.1.0 Apidoc 离线版

    Titanium Mobile SDK 3.1.0 是一个用于构建原生移动...虽然这个离线版的Apidoc在视觉呈现上可能不那么吸引人,但其内在的价值在于详实的文档和实用的信息,对于任何希望掌握Titanium开发的程序员来说,都是宝贵的财富。

    钛备份TitaniumBackup-v8.3.2-413_MoDaCo_SU-Patched_by_Alphaeva

    钛备份Titanium Backup Pro是目前为最强悍的程序和系统备份工具,需ROOT权限运行。它的程序命名就是一个暗示,钛(元素名Ti),是一种高档的金属,特点是重量轻但是强度大,相当稳固,被广泛应用于航天和航海这些...

    创新高性能移动UI框架-CanvasUI框架

    最近有人在知乎讨论ReactNative,我也凑个热闹,来个技术贴。WebView里无法获得的能力虽然是「体验增强」与「端基本能力」,但现都基本上有成熟解决方法。但后期的 UI和Layout的性能反而是目前Web技术欠缺的。所以,...

    vscode-appcelerator-titanium:用于Visual Studio Code的Appcelerator开发工具和UI包

    命令描述键绑定Titanium: Create application 创建一个新的Titanium应用程序项目-- Titanium: Create module 创建一个新的Titanium模块项目-- Titanium: Enable LiveView 启用LiveView -- Titanium: Disable ...

    titanium-d1-kickstart.6.1.1

    titanium-d1-kickstart.6.1.1.gbin 强大的思科模拟器

    [Titanium] Appcelerator Titanium 移动应用开发教程 (英文版)

    [Packt Publishing] Appcelerator Titanium 移动应用开发教程 (英文版) [Packt Publishing] Creating Mobile Apps with Appcelerator Titanium (E-Book) ☆ 图书概要:☆ Develop fully-featured mobile ...

Global site tag (gtag.js) - Google Analytics