widget.newScrollView()

类型 函数
widget.*
返回值 ScrollViewWidget
修订 版本 2024.3703
关键词 widget, 滚动视图, 滚动框, 滚动内容
另请参阅 ScrollViewWidget

概述

创建一个 ScrollViewWidget 对象。

注意事项

语法

widget.newScrollView( options )

此函数接受一个参数 options,它是一个包含以下参数的表

id (可选)

字符串要分配给滚动视图的可选标识字符串。默认为 widget_scrollView

x, y (可选)

数字控件的 **x** 和 **y** 中心点的坐标。如果定义了 lefttop 值,则这些值将被覆盖。

left, top (可选)

数字创建控件的左侧和顶部位置。如果指定,这些值将覆盖 xy 参数。

width, height (必填)

数字滚动视图的可见(屏幕上)宽度和高度。

scrollWidth, scrollHeight (可选)

数字总可滚动内容区域的宽度和高度。这可以在创建滚动视图控件后通过 object:setScrollWidth()object:setScrollHeight() 方法更改。请注意,当您将对象插入滚动视图时,这些值会自动更新。

friction (可选)

数字确定轻弹内容时内容移动的速度。默认值为 0.972

horizontalScrollDisabled (可选)

布尔值如果设置为 true,则滚动视图将不会水平滚动。

verticalScrollDisabled (可选)

布尔值如果设置为 true,则滚动视图将不会垂直滚动。

isLocked (可选)

布尔值如果设置为 true,则滚动视图将被锁定,这意味着它无法滚动。

isBounceEnabled (可选)

布尔值如果设置为 false,则滚动限制处的反弹效果将被禁用。默认为 true

listener (可选)

侦听器用于侦听 ScrollViewWidget 运动/滚动事件的函数。在此侦听器函数中,event.phase 返回预期的触摸交互阶段 "began""moved""ended"。此外,当滚动视图轻弹/滑动动量自然停止时,可以检测到 "stopped" 阶段。最后,可以通过 event.limitReached 检测到任何方向的滚动限制。如果发生这种情况,event.direction 将返回滚动视图到达限制时移动的方向。

方法

object:getContentPosition()

object:getView()

object:scrollToPosition()

object:scrollTo()

object:setIsLocked()

object:setScrollWidth()

object:setScrollHeight()

object:takeFocus()

object:setSize()

视觉选项

backgroundColor (可选)

包含 RGB+A 背景颜色设置的表。默认为白色。

backgroundColor = { 0.8, 0.8, 0.8 }
hideBackground (可选)

布尔值如果为 true,则滚动视图的背景将被隐藏,但它仍然接收触摸。

hideScrollBar (可选)

布尔值如果设置为 true,则滚动条将不会出现在滚动视图中。

scrollBarOptions (可选)

包含自定义滚动条的 图像表 规格的表。自定义滚动条需要图像表中的 3 帧。每帧都需要是大小相等的正方形。在 scrollBarOptions 表中,您必须指定 4 个必需参数:sheettopFramemiddleFramebottomFrame

scrollBarOptions = {
    sheet = scrollBarSheet,  -- Reference to the image sheet
    topFrame = 1,            -- Number of the "top" frame
    middleFrame = 2,         -- Number of the "middle" frame
    bottomFrame = 3          -- Number of the "bottom" frame
}
topPadding, bottomPadding (可选)

数字可滚动内容区域到达顶部/底部限制时,距离滚动视图顶部和底部的像素数。两者的默认值均为 0

leftPadding, rightPadding (可选)

数字可滚动内容区域到达左/右限制时,距离滚动视图左侧和右侧的像素数。两者的默认值均为 0

插入/移除对象

可以通过 object:insert()object:remove() 函数分别向滚动视图添加或从中移除视觉内容。

示例

基础滚动视图
local widget = require( "widget" )
 
-- ScrollView listener
local function scrollListener( event )

    local phase = event.phase
    if ( phase == "began" ) then print( "Scroll view was touched" )
    elseif ( phase == "moved" ) then print( "Scroll view was moved" )
    elseif ( phase == "ended" ) then print( "Scroll view was released" )
    end

    -- In the event a scroll limit is reached...
    if ( event.limitReached ) then
        if ( event.direction == "up" ) then print( "Reached bottom limit" )
        elseif ( event.direction == "down" ) then print( "Reached top limit" )
        elseif ( event.direction == "left" ) then print( "Reached right limit" )
        elseif ( event.direction == "right" ) then print( "Reached left limit" )
        end
    end

    return true
end

-- Create the widget
local scrollView = widget.newScrollView(
    {
        top = 100,
        left = 10,
        width = 300,
        height = 400,
        scrollWidth = 600,
        scrollHeight = 800,
        listener = scrollListener
    }
)

-- Create a image and insert it into the scroll view
local background = display.newImageRect( "assets/scrollimage.png", 768, 1024 )
scrollView:insert( background )
滚动视图 + 自定义滚动条
local widget = require( "widget" )
 
-- ScrollView listener
local function scrollListener( event )

    local phase = event.phase
    if ( phase == "began" ) then print( "Scroll view was touched" )
    elseif ( phase == "moved" ) then print( "Scroll view was moved" )
    elseif ( phase == "ended" ) then print( "Scroll view was released" )
    end

    -- In the event a scroll limit is reached...
    if ( event.limitReached ) then
        if ( event.direction == "up" ) then print( "Reached bottom limit" )
        elseif ( event.direction == "down" ) then print( "Reached top limit" )
        elseif ( event.direction == "left" ) then print( "Reached right limit" )
        elseif ( event.direction == "right" ) then print( "Reached left limit" )
        end
    end

    return true
end

-- Create image sheet for custom scroll bar
local scrollBarOpt = {
    width = 20,
    height = 20,
    numFrames = 3,
    sheetContentWidth = 20,
    sheetContentHeight = 60
}
local scrollBarSheet = graphics.newImageSheet( "scrollBar.png", scrollBarOpt )

-- Create the widget
local scrollView = widget.newScrollView(
    {
        top = 100,
        left = 10,
        width = 300,
        height = 400,
        scrollWidth = 600,
        scrollHeight = 800,
        listener = scrollListener,
        scrollBarOptions = {
            sheet = scrollBarSheet,
            topFrame = 1,
            middleFrame = 2,
            bottomFrame = 3
        }
    }
)

-- Create a image and insert it into the scroll view
local background = display.newImageRect( "assets/scrollimage.png", 768, 1024 )
scrollView:insert( background )