Corona手游教程之widget:PickerWheel篇

首先什么是pickerWheel,如下图所示:

这是移动设备上交互创新的典型控件,非常适合触屏进行选择,对应PC上的下拉框。

在Corona中pickerWheel被设定为320X222像素大小。我们可以使用默认样式或定制化的pickerWheel。另外,请注意列的总宽度实际是280像素,因为要扣除左右两边的20像素边框大小。

为了节约内存,pickerWheel在定制化的时候同样使用Image Sheet。pickerWheel不支持对其宽度和高度进行伸缩(scale)或改变其.width或height属性。

创建pickerWheel的方式为:

widget.newPickerWheel( options )

其options公共字段为:

  • id:(可选)一个赋予pickerWheel的标识字符串,默认为widget_pickerWheel
  • x, y:(可选)origin坐标
  • left, top:(可选)左上角坐标
  • columns:一个table,为每一个单独的列包含一个子表。

获取pickerWheel当前选中的值的方式如下:

object:getValues()

配置列数据

pickerWheel中的列,被定义成有顺序的一系列table,一起存放在columns字段里。

这些列将被从左到右添加进pickerWheel,按照你定义他们的顺序:

labels:每一行展示的标题(按顺序),例如:labels = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }

Number:(可选)默认情况下,列被均匀地分割在pickerWheel的可视区域,但是一个指定的列宽度可以通过本属性来定义。注意,所有列的总宽度加起来最大只能是280

align:(可选)指定文本标题在列中的对齐方式。可接受的值为“left”,“right”,“center”。默认为“center”。

startIndex:本列的初始选择的行。这个值不可以大于列的总个数范围。

基本样式

  • font:(可选)为pickerWheel的列设置字体。默认是native.systemFontBold
  • fontSize:(可选)列内容字体的大小。默认为22
  • columnColor:指定RGBA作为pickerWheel列背景的颜色,table如:columnColor = { 0.8, 0.8, 0.8 }
local widget = require( "widget" )

-- Create two tables to hold data for days and years
local days = {}
local years = {}

-- Populate the "days" table
for d = 1, 31 do
    days[d] = d
end

-- Populate the "years" table
for y = 1, 48 do
    years[y] = 1969 + y
end

-- Configure the picker wheel columns
local columnData =
{
    -- Months
    {
        align = "right",
        width = 140,
        startIndex = 5,
        labels = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }
    },
    -- Days
    {
        align = "center",
        width = 60,
        startIndex = 18,
        labels = days
    },
    -- Years
    {
        align = "center",
        width = 80,
        startIndex = 10,
        labels = years
    }
}

-- Create the widget
local pickerWheel = widget.newPickerWheel
{
    top = display.contentHeight - 222,
    columns = columnData
}

-- Get the table of current values for all columns
-- This can be performed on a button tap, timer execution, or other event
local values = pickerWheel:getValues()

-- Get the value for each column in the wheel (by column index)
local currentMonth = values[1].value
local currentDay = values[2].value
local currentYear = values[3].value

print( currentMonth, currentDay, currentYear )

定制样式:

pickerWheel可以用ImageSheet的帧来进行定制样式。这需要3帧:一个覆层边界/边框,一个处于覆层底下的背景帧,和一个可选的自动放在列之间的分割线(切割列),举例如下图:

  • sheet:pickerWheel使用的imageSheet
  • backgroundFrame:处于pickerWheel底部的背景图片的帧序号
  • backgroundFrameWidth,backgroundFameHeight:背景帧的宽度和高度。这个图片将会被拉伸到控件的大小,所以你直接设计成320X222来阻止其变形
  • overlayFrame:覆层图片(包围框或覆层)的帧序号
  • overlayFrameWidth,overlayFrameHeight:覆层图帧的宽度和高度。这个图片最好也设计成320X222
  • separatorFrame:(可选)分割线图片的帧序列。这些分割线将会 自动放在列之间。
  • separatorFrameWidth,separatorFrameHeight:(可选)分割线图片帧的宽度和高度,需要separatorFrame先被指定
local widget = require( "widget" )

-- Create two tables to hold data for days and years
local days = {}
local years = {}

-- Populate the "days" table
for d = 1, 31 do
    days[d] = d
end

-- Populate the "years" table
for y = 1, 48 do
    years[y] = 1969 + y
end

-- Configure the picker wheel columns
local columnData =
{
    -- Months
    {
        align = "right",
        width = 140,
        startIndex = 5,
        labels = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }
    },
    -- Days
    {
        align = "center",
        width = 60,
        startIndex = 18,
        labels = days
    },
    -- Years
    {
        align = "center",
        width = 80,
        startIndex = 10,
        labels = years
    }
}

-- Image sheet options and declaration
local options = {
    frames =
    {
        { x=0, y=0, width=320, height=222 },
        { x=320, y=0, width=320, height=222 },
        { x=640, y=0, width=8, height=222 }
    },
    sheetContentWidth = 648,
    sheetContentHeight = 222
}
local pickerWheelSheet = graphics.newImageSheet( "pickerSheet.png", options )

-- Create the widget
local pickerWheel2 = widget.newPickerWheel
{
    top = display.contentHeight - 222,
    columns = columnData,
    sheet = pickerWheelSheet,
    overlayFrame = 1,
    overlayFrameWidth = 320,
    overlayFrameHeight = 222,
    backgroundFrame = 2,
    backgroundFrameWidth = 320,
    backgroundFrameHeight = 222,
    separatorFrame = 3,
    separatorFrameWidth = 8,
    separatorFrameHeight = 222,
    columnColor = { 0, 0, 0, 0 },
    fontColor = { 0.4, 0.4, 0.4, 0.5 },
    fontColorSelected = { 0.2, 0.6, 0.4 }
}

-- Get the table of current values for all columns
-- This can be performed on a button tap, timer execution, or other event
local values = pickerWheel:getValues()

-- Get the value for each column in the wheel (by column index)
local currentMonth = values[1].value
local currentDay = values[2].value
local currentYear = values[3].value

print( currentMonth, currentDay, currentYear )
时间: 2024-10-13 02:38:29

Corona手游教程之widget:PickerWheel篇的相关文章

Corona手游教程之widget:Slider篇

废话不多说,同Corona SDK其他widget一样,出于节约内存考虑定制化的slider也需要使用ImageSheet,并且不可以伸缩(scale)或通过.width或.height属性改变宽度和高度. 我们创建一个slider的基本分方法是: widget.newSlider( options ) options的公共参数为: id:(可选)一个赋予slider的可选字符串标识.默认值为"widget_slider" x, y:(可选)origin的坐标 left, top:(可

Corona手游教程之widget:Button篇

在corona sdk里,创建界面交互元素widget,非常方便灵活,并且具备极强的可定制性. 我们创建按钮使用如下代码: widget.newButton( options ) 我们有多种方式来创建按钮,不管哪一种,options都可以包含的公共字段如下: id:(可选)一个关联到此按钮的可选的字符串标识,默认为”widget_button“ x, y:(可选)origin坐标 left, top:(可选)左上角坐标 isEnable:是否启用,默认为true.通过button:setEnab

Corona手游教程之widget:ProgressView篇

通常为了节省内存,我们通过ImageSheet来创建进度条(progressView),进度条也不支持伸缩.我们创建进度条的方式如下: widget.newProgressView( options ) options的公共字段包括如下: id:(可选)一个赋予progressView的标识字符串,默认为default_progressView x, y:(可选)widget的位置坐标的x和y left, top:(可选)左上角的坐标 width:进度条的总长度 isAnimated:(可选)如

Tkinter教程之Text(2)篇

本文转载自:http://blog.csdn.net/jcodeer/article/details/1811347 '''Tkinter教程之Text(2)篇''''''6.使用tag来指定文本的属性'''#创建一个指定背景颜色的TAG# -*- coding: cp936 -*-from Tkinter import *root = Tk()t = Text(root)# 创建一个TAG,其前景色为红色t.tag_config('a',foreground = 'red')# 使用TAG '

Tkinter教程之Text(1)篇

本文转载自:http://blog.csdn.net/jcodeer/article/details/1811343 '''Tkinter教程之Text篇(1)''''''1.创建第一个Text'''from Tkinter import *root = Tk()t = Text(root)t.pack()root.mainloop()#root中含有一Text控件,可以在这个控件内输入文本,可以使用Ctrl+C/V向Text内添加剪切板上的内容(文本),不接受Ctrl+Z执行操作'''2.向T

谷歌移动UI框架Flutter教程之Widget

引言 在之间我已经介绍了关于Flutter的下载安装以及配置,还有开发工具Android Studio的配置,还不知道的同学可以看看我这篇博客--谷歌移动UI框架Flutter入门.这里为什么非要用Android Studio,我可以解释一下.Android Studio是Google的亲儿子,由谷歌一手开发,而Flutter也是谷歌推出的技术,所以在支持和兼容问题上,Android Studio是非常有优势的.老话说得好,肥水不流外人田,谷歌内部肯定是将Android Studio对Flutt

# IT明星不是梦 # WIFI模块开发教程之W600连云篇1:onenet三色灯项目小程序篇②

前言 本文研究如何使用小程序连接云平台,进而控制上一节中连接到onenet云平台的RGB三色灯设备. 一.理论基础 1.先睹为快 视频地址:https://www.ixigua.com/i6806304062091297292/ 2.功能点简述 小程序开机页面 小程序界面布局 小程序访问onenet接口 小程序3秒刷新数据状态 小程序控制弹出编辑框设置房间号 小程序调用storage接口存取数据 二.使用实例 1.云端创建产品 接下来咱们进入正题,首先需要在云端创建一个产品,步骤如下: 创建产品

WIFI模块开发教程之W600网络篇1:AP模式下TCP Client通信

前言 本文研究如何在AP模式下进行TCP Client通信,所谓AP模式是说模块起来一个softAP热点,可以供其他WIFI设备连接,当其他设备连接成功后,另WIFI模块作为客户端,局域网中其他设备作为服务端进行TCP数据通信. 一.理论基础 本节要处理的有两个问题,其一是如何利用RT_Thread起来一个softAP,其二是如何使用Socket套接字编程搞定TCP Client程序编写. 1.模块开启SoftAP 模块需要起来一个名字为sand,密码为12345678的热点,RT_Thread

WIFI模块开发教程之W600网络篇2:AP模式下TCP Server通信

前言 本文研究如何在AP模式下进行TCP Server通信,所谓AP模式是说模块起来一个softAP热点,可以供其他WIFI设备连接,当其他设备连接成功后,另WIFI模块作为服务端,等待局域网中其他客户端连接后通信. 一. 理论基础 本节要处理的有两个问题,其一是如何利用RT_Thread连接路由器,其二是如何使用Socket套接字编程搞定TCP Server程序编写. 1.连接路由器 模块需要开启station,并且连接到一个路由器,RT_Thread中只需要调用wlan.mgnt.h中的函数