VideoView

API Reference: UI.VideoView

VideoView is a view to play video clips. Supported formats for both platforms are 3GPP (.3gp) and MPEG-4 (.mp4).

TypeScript code blocks include examples of how to implement, override and components within the theme. You can create page with the UI Editor to make your page compatible with theming and then you can implement themable components programmatically. Once the page is created with the UI Editor, it generates a class under scripts/generated/pages. You can then extend that class with the following TypeScript classes.

TypeScript
JavaScript
TypeScript
import PageSampleDesign from 'generated/pages/pageSample';
import FlexLayout = require('sf-core/ui/flexlayout');
import Application = require('sf-core/application');
import VideoView = require('sf-core/ui/videoview');
//You should create new Page from UI-Editor and extend with it.
export default class Sample extends PageSampleDesign {
myViewView: VideoView;
constructor() {
super();
// Overrides super.onShow method
this.onShow = onShow.bind(this, this.onShow.bind(this));
// Overrides super.onLoad method
this.onLoad = onLoad.bind(this, this.onLoad.bind(this));
this.layout.flexDirection = FlexLayout.FlexDirection.ROW;
this.layout.justifyContent = FlexLayout.JustifyContent.CENTER;
this.layout.alignItems = FlexLayout.AlignItems.CENTER;
}
}
/**
* @event onShow
* This event is called when a page appears on the screen (everytime).
* @param {function} superOnShow super onShow function
* @param {Object} parameters passed from Router.go function
*/
function onShow(superOnShow: () => void) {
const { headerBar } = this;
superOnShow();
Application.statusBar.visible = false;
headerBar.visible = false;
}
/**
* @event onLoad
* This event is called once when page is created.
* @param {function} superOnLoad super onLoad function
*/
function onLoad(superOnLoad: () => void) {
superOnLoad();
this.myVideoView = new VideoView({
onReady: () => {
this.myVideoView.play();
}
});
this.myVideoView.ios.page = this;
this.myVideoView.loadURL('http-video-url');
this.layout.addChild(this.myVideoView, "myVideoView", ".sf-videoView", {
margin: 20,
height: 250,
width: 250
});
}
JavaScript
const Page = require("sf-core/ui/page");
const extend = require("js-base/core/extend");
const FlexLayout = require('sf-core/ui/flexlayout');
const Color = require('sf-core/ui/color');
const Button = require('sf-core/ui/button');
const VideoView = require('sf-core/ui/videoview');
var Page1 = extend(Page)(
function(_super) {
_super(this, {
onShow: function(params) {
Application.statusBar.visible = false;
this.headerBar.visible = false;
}
});
this.layout.flexDirection = FlexLayout.FlexDirection.ROW;
this.layout.justifyContent = FlexLayout.JustifyContent.CENTER;
this.layout.alignItems = FlexLayout.AlignItems.CENTER;
var myVideoView = new VideoView({
margin:20,
height: 250,
width: 250,
onReady: function() {
myVideoView.play();
}
});
myVideoView.ios.page = this;
myVideoView.loadURL('http-video-url');
this.layout.addChild(myVideoView);
}
);
module.exports = Page1;

Usage

iOS provides controller bar for videos unlike Android. You need to add some objects(like button or label) to get the same feature only for Android.

Android Assets

VideoView.loadFile(file) does NOT work for the files under assets folder.

Video continues to play after the page is hidden

You should not forget to call the 'pause' or 'stop' method before the page is hidden.