# Titanium.UI.ScrollableView
A view that encapsulates a horizontally-scrolling set of child views, known as pages, navigable using its built-in horizontal swipe gestures.
# Overview
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 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
# cacheSize
Number of pages to cache (pre-render).
Pages are rendered in the range (currentPage +/- (cacheSize - 1)/2), rounded down for even values (i.e. 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 CREATION ONLY
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.
Default: true
# currentPage
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
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
Determines whether page bouncing effect is disabled.
Default: false
# hitRect
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)
# overlayEnabled
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
# overScrollMode
Determines the behavior when the user overscolls the view.
Default: Titanium.UI.Android.OVER_SCROLL_ALWAYS
# pageIndicatorColor
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)
# pagingControlColor
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: black
# pagingControlHeight
Height of the paging control, in pixels.
Default: 20
# pagingControlOnTop
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
# pagingControlTimeout CREATION ONLY
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
The preferred image for indicators, defined using a local filesystem path, or a Blob
object containing image data.
Symbol images are recommended. Use systemImage to get system-supplied symbol images. See examples section for usage.
# scrollingEnabled
Determines whether scrolling is enabled for the view.
If this property is unset or true
, scrolling is enabled.
Default: undefined (scrolling enabled)
# showPagingControl
Determines whether the paging control is visible.
Set to true
to show paging control.
Default: false
# Methods
# addView
Adds a new page to this Scrollable View.
Parameters
Name | Type | Description |
---|---|---|
view | Titanium.UI.View | The page to add. |
Returns
- Type
- void
# insertViewsAt
Inserts views at the specified position in the views array.
Parameters
Name | Type | Description |
---|---|---|
position | Number | Position(index) in the views array to insert the view |
views | Array<Titanium.UI.View> | Views to insert. |
Returns
- Type
- void
# moveNext
Sets the current page to the next consecutive page in views.
Since Titanium Mobile Release 3.3.0, using this method to change current page animates the change on iOS and Android.
Returns
- Type
- void
# movePrevious
Sets the current page to the previous consecutive page in views.
Since Titanium Mobile Release 3.3.0, using this method to change current page animates the change on iOS and Android.
Returns
- Type
- void
# removeView
Removes an existing page from this Scrollable View.
On Android, does nothing if the page does not exist in views.
On iOS, throws an exception if the page does not exist in views or the index is invalid.
Parameters
Name | Type | Description |
---|---|---|
view | Number | Titanium.UI.View | A Titanium.UI.View object (all platforms) or integer index (Android and iOS only) of the page to remove. |
Returns
- Type
- void
# scrollToView
Scrolls to the specified page in views.
Parameters
Name | Type | Description |
---|---|---|
view | Number | Titanium.UI.View | An integer index or Titanium.UI.View object to set as the current page. |
Returns
- Type
- void
# setIndicatorImageForPage
Sets the indicator image for the specified page.
Override the indicator image for a specific page. Symbol images are recommended. Use systemImage to get system-supplied symbol images. See examples section for usage.
Parameters
Name | Type | Description |
---|---|---|
image | String | Titanium.Blob | The image for the indicator, defined using a local filesystem path,
or a |
pageNo | Number | Page number to set the image. |
Returns
- Type
- void
# Events
# dblclick
Fired when the device detects a double click against the view.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# doubletap
Fired when the device detects a double tap against this page.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# longpress
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.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# singletap
Fired when the device detects a single tap against this view.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# touchcancel
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.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# touchstart
Fired as soon as the device detects a touch gesture against this view.
Properties
Name | Type | Description |
---|---|---|
x | Number | X coordinate of the event from the |
y | Number | Y coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# twofingertap
Fired when the device detects a two-finger tap against the view.
Properties
Name | Type | Description |
---|---|---|
y | Number | Y coordinate of the event from the |
x | Number | X coordinate of the event from the |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# scroll
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.
Properties
Name | Type | Description |
---|---|---|
currentPage | Number | Index of the currently visible view of views. |
currentPageAsFloat | Number | Current page index that the view is scrolled to as a float. For
example, if the user is holding the |
view | Titanium.UI.View | The currently visible view. |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# scrollend
Fired when the view has stopped moving completely.
Properties
Name | Type | Description |
---|---|---|
currentPage | Number | Index of the currently visible view of views. |
view | Titanium.UI.View | The currently visible view. |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |
# dragend
Fired when the scrolling drag gesture on the view has been completed.
Properties
Name | Type | Description |
---|---|---|
currentPage | Number | Index of the currently visible view of views. |
view | Titanium.UI.View | The currently visible view. |
source | Object | Source object that fired the event. |
type | String | Name of the event fired. |
bubbles | Boolean | True if the event will try to bubble up if possible. |
cancelBubble | Boolean | Set to true to stop the event from bubbling. |