Skip to content
Titanium SDK
Version13.4.0

You are reading 13.4.0. See this page in 13.4.1.

Titanium.UI.ScrollableView

viewAndroidiPhoneiPadmacOSsince 0.8

Extends Titanium.UI.ViewTitanium.Proxy

A view that encapsulates a horizontally-scrolling set of child views, known as pages, navigable using its built-in horizontal swipe gestures.

Android iOS
Android

Use the Titanium.UI.createScrollableView method or <ScrollableView> Alloy element to create a scrollable view.

The ScrollableView supports an on-screen paging control to indicate whether a previous or next page exists. When the paging control is enabled on iOS, by default it appears as small dots on the bottom of the screen, whereas Android displays arrows on the left and right-hand sides.

Use the cacheSize property to cache views inside the scrollable view. This can be required when using complex view structures in the scrollable view (e.g. map views) and the app might crash if no proper cache size is specified. See the Titanium.UI.ScrollableView.cacheSize documentation for more infos regarding view caching.

Only the scroll event exists for the ScrollableView on Android. To support others, child views may be added to pages, and event listeners added to these views instead of the pages themselves.

In a previous Titanium version for iOS, the maxZoomScale and minZoomScale properties were removed for performance and parity reasons. As they still remain in Titanium.UI.ScrollView, the equivalent functionality may be obtained by adding a ScrollView to ScrollableView. See the "Simple Scrollable View with 2 Zoomable Images" example for a demonstration.

Examples

Simple Scrollable View with 3 Views

Create three views and assign them as pages to a scrollable view.

var win = Ti.UI.createWindow();

var view1 = Ti.UI.createView({ backgroundColor:'#123' });
var view2 = Ti.UI.createView({ backgroundColor:'#246' });
var view3 = Ti.UI.createView({ backgroundColor:'#48b' });

var scrollableView = Ti.UI.createScrollableView({
  views:[view1,view2,view3],
  showPagingControl:true
});

win.add(scrollableView);
win.open();

Simple Scrollable View with 2 Zoomable Images

Create two scroll views, each containing an image view, and assign them as pages to a scrollable view.

var win = Ti.UI.createWindow();
var img1 = Ti.UI.createImageView({
    image:'http://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/' +
    'Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg/' +
    '402px-Mona_Lisa%2C_by_Leonardo_da_Vinci%2C_from_C2RMF_retouched.jpg'
});
var img1Wrapper = Ti.UI.createScrollView({
    maxZoomScale:4.0,
});
img1Wrapper.add(img1);

var img2 = Ti.UI.createImageView({
    image:'http://www.nasa.gov/images/content/' +
    '616903main_rover_comparison1600_1600-1200.jpg'
});
var img2Wrapper = Ti.UI.createScrollView({
    maxZoomScale:4.0,
});
img2Wrapper.add(img2);
var photosView = Ti.UI.createScrollableView({
    showPagingControl:true,
    views:[img1Wrapper, img2Wrapper]
});
win.add(photosView);

Scrollable View with multiple visible views

Create three views and assign them as pages to a scrollable view. Each page is narrower than a scrollable view, so multiple views are visible at the same time.

var win = Ti.UI.createWindow();

var view1 = Ti.UI.createView({ backgroundColor:'#123' });
var view2 = Ti.UI.createView({ backgroundColor:'#246' });
var view3 = Ti.UI.createView({ backgroundColor:'#48b' });

// Common params
var params = {
  views:[view1,view2,view3],
  clipViews:false,
  showPagingControl:false,
  top: 0
};

if (Ti.Platform.name === 'android') {
  // Android specific params
  params.padding = {
    left:40,
    right:40
  };
} else {
  // iOS specific params
  params.width = '90%';
}
var scrollableView = Ti.UI.createScrollableView(params);
win.add(scrollableView);
win.open();

Alloy XML Markup

First example as an Alloy view.

<Alloy>
    <Window id="win">
        <ScrollableView id="scrollableView" showPagingControl="true">
            <View id="view1" backgroundColor="#123">
              <Label>View 1</Label>
            </View>
            <View id="view2" backgroundColor="#246">
            <Label>View 2</Label>
            </View>
            <View id="view3" backgroundColor="#48b">
            <Label>View 3</Label>
            </View>
        </ScrollableView>
    </Window>
</Alloy>

Scrollable View with indicator image (iOS only)

Create three views and assign them as pages to a scrollable view. Assign preferred indicator image. After window opens, update second page indicator image.

var win = Ti.UI.createWindow({ extendSafeArea: false });

var view1 = Ti.UI.createView({ backgroundColor:'#123' });
var view2 = Ti.UI.createView({ backgroundColor:'#246' });
var view3 = Ti.UI.createView({ backgroundColor:'#48b' });
var backwardImage = Ti.UI.iOS.systemImage('backward');
var scrollableView = Ti.UI.createScrollableView({
  views:[view1,view2,view3],
  showPagingControl:true,
  preferredIndicatorImage: backwardImage
});

win.add(scrollableView);
win.addEventListener('open', function () {
  var forwardImage = Ti.UI.iOS.systemImage('forward');
  scrollableView.setIndicatorImageForPage(forwardImage, 1);
});

win.open();

Properties 91

apiName

Stringsince Android 3.2.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0read-only

Inherited from Titanium.Proxy

The name of the API that this proxy corresponds to.

Inherited from Titanium.UI.View

A background gradient for the view.

Linear and Radial Gradients

The following code excerpt creates two views, one with a linear gradient and one with a radial gradient.

var win1 = Titanium.UI.createWindow({
    title:'Tab 1',
    backgroundColor:'#fff',
    layout: 'vertical'
});

var radialGradient = Ti.UI.createView({
    top: 10,
    width: 100,
    height: 100,
    backgroundGradient: {
        type: 'radial',
        startPoint: { x: 50, y: 50 },
        endPoint: { x: 50, y: 50 },
        colors: [ 'red', 'blue'],
        startRadius: 50,
        endRadius: 0,
        backfillStart: true
    }
});
var linearGradient = Ti.UI.createView({
    top: 10,
    width: 100,
    height: 100,
    backgroundGradient: {
        type: 'linear',
        startPoint: { x: '0%', y: '50%' },
        endPoint: { x: '100%', y: '50%' },
        colors: [ { color: 'red', offset: 0.0}, { color: 'blue', offset: 0.25 }, { color: 'red', offset: 1.0 } ],
    }
});
win1.add(radialGradient);
win1.add(linearGradient);
win1.open();

borderRadius

Number | String | Array<Number> | Array<String>

Inherited from Titanium.UI.View

Radius for the rounded corners of the view's border.

Default: 0

bubbleParent

Booleansince Android 3.0.0, iPhone 3.0.0, iPad 3.0.0, macOS 9.2.0

Inherited from Titanium.Proxy

Indicates if the proxy will bubble an event to its parent.

Default: true

cacheSize

Numbersince 4.1.0

Number of pages to cache (pre-render).

Pages are rendered in the range (currentPage +/- (cacheSize - 1)/2), rounded down for even values (e.g. cacheSize=4 renders 3 pages into the cache.) Keep in mind that improved performance (larger cache) will lead to faster performance, but greater memory usage.

clipViews

Booleansince 7.5.0

Determines whether the previous and next pages are clipped, so that they are not visible adjacent to the current page.

Set to false to allow the previous or next pages to be seen. Note that ScrollableView's width must be smaller than its parent view in order to make this property effective on iOS. For Android you have to set the padding property.

Check the Scrollable View with multiple visible views example for both platforms.

Default: true

Index of the active page.

Since Titanium Mobile Release 3.3.0, using this property to change current page changes the page without animation on iOS and Android.

currentPageIndicatorColor

String | Titanium.UI.ColoriPhoneiPadmacOSsince 5.4.0

Color for the current page of the paging control, as a color name or hex triplet.

For information about color values, see the "Colors" section of Titanium.UI.

Default: undefined (system-default white)

disableBounce

BooleaniPhoneiPadmacOS

Determines whether page bouncing effect is disabled.

Default: false

elevation

NumberAndroidsince 5.0.0Android 5+

Inherited from Titanium.UI.View

Base elevation of the view relative to its parent in pixels.

focusable

BooleanAndroid

Inherited from Titanium.UI.View

Whether view should be focusable while navigating with the trackball.

Default: false

hitRect

DimensioniPhoneiPadmacOSsince 2.1

Sets the region where this view responds to gestures.

This property is particularly useful when clipViews is set to false and the dimension of this view is small, to create a larger area for the user to perform swipe gestures against.

Note that the x and y values specified are relative to the position of the view.

Default: undefined (hit against size of view)

layout

String

Inherited from Titanium.UI.View

Specifies how the view positions its children. One of: 'composite', 'vertical', or 'horizontal'.

left

Number | String

Inherited from Titanium.UI.View

View's left position, in platform-specific units.

opacity

Number

Inherited from Titanium.UI.View

Opacity of this view, from 0.0 (transparent) to 1.0 (opaque). Defaults to 1.0 (opaque).

overlayEnabled

BooleaniPhoneiPadmacOSsince 2.1.0

Determines whether the paging control is added as an overlay to the view.

If this property is set to true, the view takes up the entire height available in the parent view and the paging control is placed over the view. It is advisable to set an appropriate value for pagingControlAlpha along with this property, so that the underlying view content may be seen properly.

Default: false

padding

PaddingAndroidsince 7.5.0

The padding applied to the scrollable view.

pageIndicatorColor

String | Titanium.UI.ColoriPhoneiPadmacOSsince 5.4.0

Color of the paging control, as a color name or hex triplet.

For information about color values, see the "Colors" section of Titanium.UI.

Default: undefined (system-default gray)

pagingControlAlpha

NumberiPhoneiPadmacOSsince 2.1.0

Alpha value of the paging control.

Default: 1

pagingControlOnTop

BooleaniPhoneiPadmacOSsince 2.1.0

Determines whether the paging control is displayed at the top or bottom of the view.

Set to true for the paging control at the top.

Default: false

Number of milliseconds to wait before hiding the paging control.

Set to less than or equal to 0 to disable timeout, to keep controls displayed.

Default: 3000

preferredIndicatorImage

String | Titanium.BlobiPhoneiPadsince 9.2.0iOS 14.0+

The preferred image for indicators, defined using a local filesystem path, or a Blob object containing image data.

Symbol images are recommended. Use Titanium.UI.iOS.systemImage to get system-supplied symbol images. See examples section for usage.

rect

DimensionWithAbsolutessince 2.0.0read-only

Inherited from Titanium.UI.View

The bounding box of the view relative to its parent, in system units.

rotation

NumberAndroidiPhoneiPadsince Android 5.4.0, iPhone 12.3.0, iPad 12.3.0

Inherited from Titanium.UI.View

Clockwise 2D rotation of the view in degrees.

scrollingEnabled

Booleansince Android 2.1.0, iPhone 2.0.0, iPad 2.0.0

Determines whether scrolling is enabled for the view.

If this property is unset or true, scrolling is enabled.

Default: undefined (scrolling enabled)

scrollType

StringAndroidsince 13.2.0

Direction of the ScrollableView (horizontal or vertical).

The default ScrollableView will add multiple views horizontally. Setting it to vertical will create a vertical list of views. Make sure to set showPagingControl to false to hide the left/right arrows.

Default: horizontal

Determines whether the paging control is visible.

Set to true to show paging control.

Default: false

tooltip

Stringsince 12.1.0iOS 15.0+

Inherited from Titanium.UI.View

The default text to display in the control's tooltip.

touchFeedback

BooleanAndroidsince 6.1.0

Inherited from Titanium.UI.View

A material design visual construct that provides an instantaneous visual confirmation of touch point.

Default: false

translationX

NumberAndroidsince 5.0.0

Inherited from Titanium.UI.View

Horizontal location of the view relative to its left position in pixels.

Methods 20

Inherited from Titanium.Proxy

Adds the specified callback as an event listener for the named event.

Parameters
ParametersTypeDescription
nameString

Name of the event.

callbackCallback<Titanium.Event>

Callback function to invoke when the event is fired.

4 fields
bubbles Boolean

True if the event will try to bubble up if possible.

cancelBubble Boolean

Set to true to stop the event from bubbling.

source Object

Source object that fired the event.

type String

Name of the event fired.

Adds a new page to this Scrollable View.

Parameters
ParametersTypeDescription
viewTitanium.UI.View

The page to add.

convertPointToView

since Android 1.8, iPhone 1.8, iPad 1.8, macOS 9.2.0

Inherited from Titanium.UI.View

Translates a point from this view's coordinate system to another view's coordinate system.

Parameters
ParametersTypeDescription
pointPoint

A point in this view's coordinate system.

If this argument is missing an x or y property, or the properties can not be converted into numbers, an exception will be raised.

destinationViewTitanium.UI.View

View that specifies the destination coordinate system to convert to. If this argument is not a view, an exception will be raised.

Returns Point

Inherited from Titanium.Proxy

Fires a synthesized event to any registered listeners.

Parameters
ParametersTypeDescription
nameString

Name of the event.

event?Dictionary

A dictionary of keys and values to add to the Titanium.Event object sent to the listeners.

getViewById

since 6.1.0

Inherited from Titanium.UI.View

Returns the matching view of a given view ID.

Parameters
ParametersTypeDescription
idString

The ID of the view that should be returned. Use the id property in your views to enable it for indexing in this method.

Inherited from Titanium.UI.View

Hides this view.

Parameters
ParametersTypeDescription
options?AnimatedOptions

Animation options for Android only. Since SDK 5.1.0 and used only on Android 5.0+

Determines whether to enable a circular reveal animation. Note that the default here is equivalent to passing in { animated: false }

insertAt

since 3.3.0

Inherited from Titanium.UI.View

Inserts a view at the specified position in the children array.

Parameters
ParametersTypeDescription
paramsViewPositionOptions

Pass an object that specifies the view to insert and optionally at which position (defaults to end)

2 fields
position? Number

Position in the children array of the view element to replace.

view Titanium.UI.View

View to insert. Required.

insertViewsAt

since 5.4.0

Inserts views at the specified position in the views array.

Parameters
ParametersTypeDescription
positionNumber

Position(index) in the views array to insert the view

viewsArray<Titanium.UI.View>

Views to insert.

moveNext

since 3.3.0

Sets the current page to the next consecutive page in Titanium.UI.ScrollableView.views.

Since Titanium Mobile Release 3.3.0, using this method to change current page animates the change on iOS and Android.

movePrevious

since 3.3.0

Sets the current page to the previous consecutive page in Titanium.UI.ScrollableView.views.

Since Titanium Mobile Release 3.3.0, using this method to change current page animates the change on iOS and Android.

Inherited from Titanium.Proxy

Removes the specified callback as an event listener for the named event.

Parameters
ParametersTypeDescription
nameString

Name of the event.

callbackCallback<Titanium.Event>

Callback function to remove. Must be the same function passed to addEventListener.

4 fields
bubbles Boolean

True if the event will try to bubble up if possible.

cancelBubble Boolean

Set to true to stop the event from bubbling.

source Object

Source object that fired the event.

type String

Name of the event fired.

setIndicatorImageForPage

iPhoneiPadsince 9.2.0iOS 14.0+

Sets the indicator image for the specified page.

Override the indicator image for a specific page. Symbol images are recommended. Use Titanium.UI.iOS.systemImage to get system-supplied symbol images. See examples section for usage.

Parameters
ParametersTypeDescription
imageString | Titanium.Blob

The image for the indicator, defined using a local filesystem path, or a Blob object containing image data. Resets to the default if image is null.

pageNoNumber

Page number to set the image.

Inherited from Titanium.UI.View

Makes this view visible.

Parameters
ParametersTypeDescription
options?AnimatedOptions

Animation options for Android only. Since SDK 5.1.0 and only used on Android 5.0+

Determines whether to enable a circular reveal animation. Note that the default here is equivalent to passing in { animated: false }

Inherited from Titanium.UI.View

Returns an image of the rendered view, as a Blob.

Parameters
ParametersTypeDescription
callback?Callback<Titanium.Blob>

Function to be invoked upon completion. If non-null, this method will be performed asynchronously. If null, it will be performed immediately.

honorScaleFactor?Boolean

Determines whether the image is scaled based on scale factor of main screen. (iOS only)

When set to true, image is scale factor is honored. When set to false, the image in the blob has the same dimensions for retina and non-retina devices.

Events 14

dblclick

iPhoneiPadmacOS

Fired when the device detects a double click against the view.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

doubletap

iPhoneiPadmacOS

Fired when the device detects a double tap against this page.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

dragend

Androidsince 3.0.0

Fired when the scrolling drag gesture on the view has been completed.

Event properties
Event propertiesTypeDescription
currentPageNumber

Index of the currently visible view of Titanium.UI.ScrollableView.views.

viewTitanium.UI.View

The currently visible view.

keypressed

since Android 3.1.0, iPhone 5.4.0, iPad 5.4.0, macOS 9.2.0

Inherited from Titanium.UI.View

Fired when a hardware key is pressed in the view.

Event properties
Event propertiesTypeDescription
keyCodeNumber

The code for the physical key that was pressed. For more details, see KeyEvent. This API is experimental and subject to change.

longpress

iPhoneiPadmacOS

Fired when the device detects a long press against this view.

Generated by touching and holding on a touchscreen, this event occurs before the finger is lifted again. Note that longpress cannot be generated with a trackball.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

rotate

since 12.7.0

Inherited from Titanium.UI.View

Fired when the device detects a two finger rotation.

Event properties
Event propertiesTypeDescription
rotateNumber

Rotation in degrees.

Fired repeatedly as the view is being scrolled.

Prior to 2.1, the scroll event did not fire consistently on all platforms. On iOS, it fired when scrolling ended, and on Android, it fired when drag ended. You can restore the pre-2.1 behavior by listening for the scrollEnd or dragEnd events instead.

Event properties
Event propertiesTypeDescription
currentPageNumber

Index of the currently visible view of Titanium.UI.ScrollableView.views.

currentPageAsFloatNumber

Current page index that the view is scrolled to as a float. For example, if the user is holding the ScrollableView in between the first and second page, this will have a value of 0.5.

viewTitanium.UI.View

The currently visible view.

singletap

iPhoneiPadmacOS

Fired when the device detects a single tap against this view.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

touchcancel

iPhoneiPadmacOS

Fired when a touch gesture is interrupted by the device.

Generated in various circumstances, including an incoming call to allow the UI to clean up state.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

touchstart

iPhoneiPadmacOS

Fired as soon as the device detects a touch gesture against this view.

Event properties
Event propertiesTypeDescription
xNumber

X coordinate of the event from the source view's coordinate system.

yNumber

Y coordinate of the event from the source view's coordinate system.

twofingertap

iPhoneiPadmacOS

Fired when the device detects a two-finger tap against the view.

Event properties
Event propertiesTypeDescription
yNumber

Y coordinate of the event from the source view's coordinate system.

xNumber

X coordinate of the event from the source view's coordinate system.