SlideShare a Scribd company logo
Creating a Netflix Clone
VI
codenameone.com github.com/codenameone/CodenameOne
Client UI
codenameone.com github.com/codenameone/CodenameOne
Client UI
There are just three forms in the demo
We’re using layered toolbar for the UI
CSS is used for the UI design
#Constants {
includeNativeBool: true;
labelGap: 1;
}
Form {
background: black;
}
TitleCommand {
color: white;
}
ToolbarGradient {
border: none;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6));
padding: 2mm;
}
ThumbIcon {
background: transparent;
margin: 0px;
padding: 8mm;
padding-right: 3mm;
}
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
public class BaseForm extends Form {
public BaseForm(Layout l) {
super(l);
}
@Override
protected void initGlobalToolbar() {
Toolbar tb = new Toolbar(true);
setToolbar(tb);
tb.setUIID("ToolbarGradient");
}
}
Source Listing - BaseForm
codenameone.com github.com/codenameone/CodenameOne
Form {
background: black;
}
TitleCommand {
color: white;
}
ToolbarGradient {
border: none;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6));
padding: 2mm;
}
ThumbIcon {
background: transparent;
margin: 0px;
padding: 8mm;
padding-right: 3mm;
}
HeroImageLogo {
/* margin: 35% 22% 5mm 22%; */
margin: 35mm 7mm 5mm 7mm;
padding: 3.5mm;
background: transparent;
}
HeroImagePlayButton {
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
public class SplashForm extends Form {
private SplashForm() {
super(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER));
}
private void init() {
Resources r = Resources.getGlobalResources();
add(CENTER, new Label(r.getImage("netflix-logo.png")));
}
public static SplashForm create() {
SplashForm h = new SplashForm();
h.init();
return h;
}
}
Source Listing - SplashForm
codenameone.com github.com/codenameone/CodenameOne
border: none;
background-color: black;
padding: 1.5mm 0.5mm 1.5mm 0.5mm;
margin: 0px;
}
/* =============== IMAGES ============= */
ImageImports1 {
background-image: url(images/data/show-logo.png),
url(images/data/hero-background.jpg),
url(images/data/thumb1.jpg),
url(images/data/thumb2.jpg),
url(images/data/thumb3.jpg),
url(images/data/thumb4.jpg),
url(images/data/thumb5.jpg),
url(images/data/thumb6.jpg),
url(images/data/thumb7.jpg),
url(images/data/thumb8.jpg);
cn1-source-dpi: 0;
}
ImageImports2 {
background-image: url(images/netflix-logo.png);
cn1-source-dpi: 320;
}
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
border: none;
background-color: black;
padding: 1.5mm 0.5mm 1.5mm 0.5mm;
margin: 0px;
}
/* =============== IMAGES ============= */
ImageImports1 {
background-image: url(images/data/show-logo.png),
url(images/data/hero-background.jpg),
url(images/data/thumb1.jpg),
url(images/data/thumb2.jpg),
url(images/data/thumb3.jpg),
url(images/data/thumb4.jpg),
url(images/data/thumb5.jpg),
url(images/data/thumb6.jpg),
url(images/data/thumb7.jpg),
url(images/data/thumb8.jpg);
cn1-source-dpi: 0;
}
ImageImports2 {
background-image: url(images/netflix-logo.png);
cn1-source-dpi: 320;
}
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
border: none;
background-color: black;
padding: 1.5mm 0.5mm 1.5mm 0.5mm;
margin: 0px;
}
/* =============== IMAGES ============= */
ImageImports1 {
background-image: url(images/data/show-logo.png),
url(images/data/hero-background.jpg),
url(images/data/thumb1.jpg),
url(images/data/thumb2.jpg),
url(images/data/thumb3.jpg),
url(images/data/thumb4.jpg),
url(images/data/thumb5.jpg),
url(images/data/thumb6.jpg),
url(images/data/thumb7.jpg),
url(images/data/thumb8.jpg);
cn1-source-dpi: 0;
}
ImageImports2 {
background-image: url(images/netflix-logo.png);
cn1-source-dpi: 320;
}
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
public class HomeForm extends BaseForm {
private HomeForm() {
super(new BorderLayout());
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
add(CENTER, tabs);
}
private Container movieList(List<Content> lst) {
Container p = new Container(BoxLayout.x());
for(Content c : lst) {
ScaleImageButton b = new ScaleImageButton(c.icon.get());
b.setUIID("ThumbIcon");
p.add(b);
b.addActionListener(e -> {
DetailsForm.create(c).show();
});
}
p.setScrollableX(true);
return p;
}
public static HomeForm create(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
HomeForm h = new HomeForm();
h.init(lead, popularTitles, myTitles, recommended);
return h;
}
}
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
public class HomeForm extends BaseForm {
private HomeForm() {
super(new BorderLayout());
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
public class HomeForm extends BaseForm {
private HomeForm() {
super(new BorderLayout());
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
public class HomeForm extends BaseForm {
private HomeForm() {
super(new BorderLayout());
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
ToolbarGradient {
border: none;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6));
padding: 2mm;
}
ThumbIcon {
background: transparent;
margin: 0px;
padding: 8mm;
padding-right: 3mm;
}
HeroImageLogo {
margin: 35mm 7mm 5mm 7mm;
padding: 3.5mm;
background: transparent;
}
HeroImagePlayButton {
border: none;
border-radius: 1.5mm;
background-color: #D8D8D8;
color: black;
font-family: "native:MainRegular";
font-size: 3mm;
padding: 2mm 4mm 2mm 4mm;
}
Lead {
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
margin: 0px;
padding: 8mm;
padding-right: 3mm;
}
HeroImageLogo {
margin: 35mm 7mm 5mm 7mm;
padding: 3.5mm;
background: transparent;
}
HeroImagePlayButton {
border: none;
border-radius: 1.5mm;
background-color: #D8D8D8;
color: black;
font-family: "native:MainRegular";
font-size: 3mm;
padding: 2mm 4mm 2mm 4mm;
}
Lead {
color: white;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.01));
padding: 5mm 2mm 0.3mm 2mm;
font-family: "native:MainRegular";
font-size: 2.4mm;
}
PlayNowButton {
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
}
private void init(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
Resources r = Resources.getGlobalResources();
Toolbar tb = getToolbar();
((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png"));
// adding this just so the sidemenu and search icon appear
tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{});
tb.addSearchCommand(e -> {});
ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get());
logo.setUIID("HeroImageLogo");
Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton");
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
}
HeroImagePlayButton {
border: none;
border-radius: 1.5mm;
background-color: #D8D8D8;
color: black;
font-family: "native:MainRegular";
font-size: 3mm;
padding: 2mm 4mm 2mm 4mm;
}
Lead {
color: white;
background: linear-gradient(0deg, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.01));
padding: 5mm 2mm 0.3mm 2mm;
font-family: "native:MainRegular";
font-size: 2.4mm;
}
PlayNowButton {
color: white;
background-color: rgba(0, 0, 0, 0.6);
border: 2px #ffffff cn1-round-border;
padding: 2mm;
font-family: "native:MainRegular";
font-size: 3.5mm;
margin: 15mm 7mm 15mm 7mm;
}
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
movieList(myTitles),
new Label("Recommended", "Lead"),
movieList(recommended));
content.setScrollableY(true);
tabs.addTab("Home", MATERIAL_HOME, 4, content);
tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO"));
tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO"));
tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO"));
add(CENTER, tabs);
}
private Container movieList(List<Content> lst) {
Container p = new Container(BoxLayout.x());
for(Content c : lst) {
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
padding: 3mm;
margin: 0px;
}
DescriptionFormButton {
color: white;
font-family: "native:MainLight";
font-size: 3.5mm;
padding: 3mm;
margin: 0px;
}
Tab {
color: white;
font-family: "native:MainLight";
font-size: 2.1mm;
border: none;
background-color: black;
padding: 1.5mm 0.5mm 1.5mm 0.5mm;
margin: 0px;
}
/* =============== IMAGES ============= */
ImageImports1 {
background-image: url(images/data/show-logo.png),
url(images/data/hero-background.jpg),
url(images/data/thumb1.jpg),
url(images/data/thumb2.jpg),
url(images/data/thumb3.jpg),
Source Listing - CSS
codenameone.com github.com/codenameone/CodenameOne
Container heroTitle = BoxLayout.encloseY(logo,
FlowLayout.encloseCenter(play),
new Label("Popular on Netflix", "Lead"));
Style stl = heroTitle.getAllStyles();
stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
stl.setBgImage(lead.heroImage.get());
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
movieList(myTitles),
new Label("Recommended", "Lead"),
movieList(recommended));
content.setScrollableY(true);
tabs.addTab("Home", MATERIAL_HOME, 4, content);
tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO"));
tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO"));
tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO"));
add(CENTER, tabs);
}
private Container movieList(List<Content> lst) {
Container p = new Container(BoxLayout.x());
for(Content c : lst) {
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
tabs.addTab("Home", MATERIAL_HOME, 4, content);
tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO"));
tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO"));
tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO"));
add(CENTER, tabs);
}
private Container movieList(List<Content> lst) {
Container p = new Container(BoxLayout.x());
for(Content c : lst) {
ScaleImageButton b = new ScaleImageButton(c.icon.get());
b.setUIID("ThumbIcon");
p.add(b);
b.addActionListener(e -> {
DetailsForm.create(c).show();
});
}
p.setScrollableX(true);
return p;
}
public static HomeForm create(Content lead, List<Content> popularTitles,
List<Content> myTitles,
List<Content> recommended) {
HomeForm h = new HomeForm();
h.init(lead, popularTitles, myTitles, recommended);
return h;
}
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
Tabs tabs = new Tabs();
tabs.setTabPlacement(BOTTOM);
Container content = BoxLayout.encloseY(heroTitle,
movieList(popularTitles),
new Label("My List", "Lead"),
movieList(myTitles),
new Label("Recommended", "Lead"),
movieList(recommended));
content.setScrollableY(true);
tabs.addTab("Home", MATERIAL_HOME, 4, content);
tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO"));
tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO"));
tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO"));
add(CENTER, tabs);
}
private Container movieList(List<Content> lst) {
Container p = new Container(BoxLayout.x());
for(Content c : lst) {
ScaleImageButton b = new ScaleImageButton(c.icon.get());
b.setUIID("ThumbIcon");
p.add(b);
b.addActionListener(e -> {
DetailsForm.create(c).show();
});
}
p.setScrollableX(true);
Source Listing - HomeForm
codenameone.com github.com/codenameone/CodenameOne
codenameone.com github.com/codenameone/CodenameOne
Thank You
Thank You
create-netflix-clone-06-client-ui.pdf

More Related Content

Similar to create-netflix-clone-06-client-ui.pdf

The Ring programming language version 1.3 book - Part 37 of 88
The Ring programming language version 1.3 book - Part 37 of 88The Ring programming language version 1.3 book - Part 37 of 88
The Ring programming language version 1.3 book - Part 37 of 88
Mahmoud Samir Fayed
 
The Ring programming language version 1.4 book - Part 12 of 30
The Ring programming language version 1.4 book - Part 12 of 30The Ring programming language version 1.4 book - Part 12 of 30
The Ring programming language version 1.4 book - Part 12 of 30
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184
Mahmoud Samir Fayed
 
Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx
Toma Velev
 
The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185
Mahmoud Samir Fayed
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
Publicis Sapient Engineering
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02PL dream
 
MySQL User Conference 2009: Python and MySQL
MySQL User Conference 2009: Python and MySQLMySQL User Conference 2009: Python and MySQL
MySQL User Conference 2009: Python and MySQLTed Leung
 
Drawing images
Drawing imagesDrawing images
Drawing images
MfahamedaThabaseem
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdf
ShaiAlmog1
 
mobl
moblmobl
mobl
zefhemel
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
Remy Sharp
 
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...Krzysztof Opałka
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
erwanl
 
Mongo db勉強会20110730
Mongo db勉強会20110730Mongo db勉強会20110730
Mongo db勉強会20110730Akihiro Okuno
 
The Ring programming language version 1.5.2 book - Part 42 of 181
The Ring programming language version 1.5.2 book - Part 42 of 181The Ring programming language version 1.5.2 book - Part 42 of 181
The Ring programming language version 1.5.2 book - Part 42 of 181
Mahmoud Samir Fayed
 
Creating an Uber Clone - Part XXXIX.pdf
Creating an Uber Clone - Part XXXIX.pdfCreating an Uber Clone - Part XXXIX.pdf
Creating an Uber Clone - Part XXXIX.pdf
ShaiAlmog1
 
The Ring programming language version 1.5.4 book - Part 43 of 185
The Ring programming language version 1.5.4 book - Part 43 of 185The Ring programming language version 1.5.4 book - Part 43 of 185
The Ring programming language version 1.5.4 book - Part 43 of 185
Mahmoud Samir Fayed
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
Remy Sharp
 

Similar to create-netflix-clone-06-client-ui.pdf (20)

The Ring programming language version 1.3 book - Part 37 of 88
The Ring programming language version 1.3 book - Part 37 of 88The Ring programming language version 1.3 book - Part 37 of 88
The Ring programming language version 1.3 book - Part 37 of 88
 
The Ring programming language version 1.4 book - Part 12 of 30
The Ring programming language version 1.4 book - Part 12 of 30The Ring programming language version 1.4 book - Part 12 of 30
The Ring programming language version 1.4 book - Part 12 of 30
 
The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184
 
Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx Flutter vs Java Graphical User Interface Frameworks.pptx
Flutter vs Java Graphical User Interface Frameworks.pptx
 
The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
 
MySQL User Conference 2009: Python and MySQL
MySQL User Conference 2009: Python and MySQLMySQL User Conference 2009: Python and MySQL
MySQL User Conference 2009: Python and MySQL
 
Drawing images
Drawing imagesDrawing images
Drawing images
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdf
 
mobl
moblmobl
mobl
 
HTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymoreHTML5: where flash isn't needed anymore
HTML5: where flash isn't needed anymore
 
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...An Introduction to Game Programming with Flash: An Introduction to Flash and ...
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
 
Mongo db勉強会20110730
Mongo db勉強会20110730Mongo db勉強会20110730
Mongo db勉強会20110730
 
The Ring programming language version 1.5.2 book - Part 42 of 181
The Ring programming language version 1.5.2 book - Part 42 of 181The Ring programming language version 1.5.2 book - Part 42 of 181
The Ring programming language version 1.5.2 book - Part 42 of 181
 
Creating an Uber Clone - Part XXXIX.pdf
Creating an Uber Clone - Part XXXIX.pdfCreating an Uber Clone - Part XXXIX.pdf
Creating an Uber Clone - Part XXXIX.pdf
 
The Ring programming language version 1.5.4 book - Part 43 of 185
The Ring programming language version 1.5.4 book - Part 43 of 185The Ring programming language version 1.5.4 book - Part 43 of 185
The Ring programming language version 1.5.4 book - Part 43 of 185
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
 

More from ShaiAlmog1

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...
ShaiAlmog1
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdf
ShaiAlmog1
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdf
ShaiAlmog1
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdf
ShaiAlmog1
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdf
ShaiAlmog1
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdf
ShaiAlmog1
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdf
ShaiAlmog1
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdf
ShaiAlmog1
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part IX.pdf
Creating a Whatsapp Clone - Part IX.pdfCreating a Whatsapp Clone - Part IX.pdf
Creating a Whatsapp Clone - Part IX.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part VI.pdf
Creating a Whatsapp Clone - Part VI.pdfCreating a Whatsapp Clone - Part VI.pdf
Creating a Whatsapp Clone - Part VI.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part III - Transcript.pdf
Creating a Whatsapp Clone - Part III - Transcript.pdfCreating a Whatsapp Clone - Part III - Transcript.pdf
Creating a Whatsapp Clone - Part III - Transcript.pdf
ShaiAlmog1
 
Creating a Whatsapp Clone - Part XI - Transcript.pdf
Creating a Whatsapp Clone - Part XI - Transcript.pdfCreating a Whatsapp Clone - Part XI - Transcript.pdf
Creating a Whatsapp Clone - Part XI - Transcript.pdf
ShaiAlmog1
 

More from ShaiAlmog1 (20)

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdf
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdf
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdf
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdf
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdf
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdf
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdf
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdf
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdf
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdf
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdf
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdf
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdf
 
Creating a Whatsapp Clone - Part IX.pdf
Creating a Whatsapp Clone - Part IX.pdfCreating a Whatsapp Clone - Part IX.pdf
Creating a Whatsapp Clone - Part IX.pdf
 
Creating a Whatsapp Clone - Part VI.pdf
Creating a Whatsapp Clone - Part VI.pdfCreating a Whatsapp Clone - Part VI.pdf
Creating a Whatsapp Clone - Part VI.pdf
 
Creating a Whatsapp Clone - Part III - Transcript.pdf
Creating a Whatsapp Clone - Part III - Transcript.pdfCreating a Whatsapp Clone - Part III - Transcript.pdf
Creating a Whatsapp Clone - Part III - Transcript.pdf
 
Creating a Whatsapp Clone - Part XI - Transcript.pdf
Creating a Whatsapp Clone - Part XI - Transcript.pdfCreating a Whatsapp Clone - Part XI - Transcript.pdf
Creating a Whatsapp Clone - Part XI - Transcript.pdf
 

Recently uploaded

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 

Recently uploaded (20)

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 

create-netflix-clone-06-client-ui.pdf

  • 3. codenameone.com github.com/codenameone/CodenameOne Client UI There are just three forms in the demo We’re using layered toolbar for the UI CSS is used for the UI design
  • 4. #Constants { includeNativeBool: true; labelGap: 1; } Form { background: black; } TitleCommand { color: white; } ToolbarGradient { border: none; background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6)); padding: 2mm; } ThumbIcon { background: transparent; margin: 0px; padding: 8mm; padding-right: 3mm; } Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 5. public class BaseForm extends Form { public BaseForm(Layout l) { super(l); } @Override protected void initGlobalToolbar() { Toolbar tb = new Toolbar(true); setToolbar(tb); tb.setUIID("ToolbarGradient"); } } Source Listing - BaseForm codenameone.com github.com/codenameone/CodenameOne
  • 6. Form { background: black; } TitleCommand { color: white; } ToolbarGradient { border: none; background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6)); padding: 2mm; } ThumbIcon { background: transparent; margin: 0px; padding: 8mm; padding-right: 3mm; } HeroImageLogo { /* margin: 35% 22% 5mm 22%; */ margin: 35mm 7mm 5mm 7mm; padding: 3.5mm; background: transparent; } HeroImagePlayButton { Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 7. public class SplashForm extends Form { private SplashForm() { super(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER)); } private void init() { Resources r = Resources.getGlobalResources(); add(CENTER, new Label(r.getImage("netflix-logo.png"))); } public static SplashForm create() { SplashForm h = new SplashForm(); h.init(); return h; } } Source Listing - SplashForm codenameone.com github.com/codenameone/CodenameOne
  • 8. border: none; background-color: black; padding: 1.5mm 0.5mm 1.5mm 0.5mm; margin: 0px; } /* =============== IMAGES ============= */ ImageImports1 { background-image: url(images/data/show-logo.png), url(images/data/hero-background.jpg), url(images/data/thumb1.jpg), url(images/data/thumb2.jpg), url(images/data/thumb3.jpg), url(images/data/thumb4.jpg), url(images/data/thumb5.jpg), url(images/data/thumb6.jpg), url(images/data/thumb7.jpg), url(images/data/thumb8.jpg); cn1-source-dpi: 0; } ImageImports2 { background-image: url(images/netflix-logo.png); cn1-source-dpi: 320; } Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 9. border: none; background-color: black; padding: 1.5mm 0.5mm 1.5mm 0.5mm; margin: 0px; } /* =============== IMAGES ============= */ ImageImports1 { background-image: url(images/data/show-logo.png), url(images/data/hero-background.jpg), url(images/data/thumb1.jpg), url(images/data/thumb2.jpg), url(images/data/thumb3.jpg), url(images/data/thumb4.jpg), url(images/data/thumb5.jpg), url(images/data/thumb6.jpg), url(images/data/thumb7.jpg), url(images/data/thumb8.jpg); cn1-source-dpi: 0; } ImageImports2 { background-image: url(images/netflix-logo.png); cn1-source-dpi: 320; } Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 10. border: none; background-color: black; padding: 1.5mm 0.5mm 1.5mm 0.5mm; margin: 0px; } /* =============== IMAGES ============= */ ImageImports1 { background-image: url(images/data/show-logo.png), url(images/data/hero-background.jpg), url(images/data/thumb1.jpg), url(images/data/thumb2.jpg), url(images/data/thumb3.jpg), url(images/data/thumb4.jpg), url(images/data/thumb5.jpg), url(images/data/thumb6.jpg), url(images/data/thumb7.jpg), url(images/data/thumb8.jpg); cn1-source-dpi: 0; } ImageImports2 { background-image: url(images/netflix-logo.png); cn1-source-dpi: 320; } Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 11. public class HomeForm extends BaseForm { private HomeForm() { super(new BorderLayout()); } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 12. add(CENTER, tabs); } private Container movieList(List<Content> lst) { Container p = new Container(BoxLayout.x()); for(Content c : lst) { ScaleImageButton b = new ScaleImageButton(c.icon.get()); b.setUIID("ThumbIcon"); p.add(b); b.addActionListener(e -> { DetailsForm.create(c).show(); }); } p.setScrollableX(true); return p; } public static HomeForm create(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { HomeForm h = new HomeForm(); h.init(lead, popularTitles, myTitles, recommended); return h; } } Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 13. public class HomeForm extends BaseForm { private HomeForm() { super(new BorderLayout()); } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 14. public class HomeForm extends BaseForm { private HomeForm() { super(new BorderLayout()); } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 15. public class HomeForm extends BaseForm { private HomeForm() { super(new BorderLayout()); } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 16. } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 17. } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 18. ToolbarGradient { border: none; background: linear-gradient(0deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6)); padding: 2mm; } ThumbIcon { background: transparent; margin: 0px; padding: 8mm; padding-right: 3mm; } HeroImageLogo { margin: 35mm 7mm 5mm 7mm; padding: 3.5mm; background: transparent; } HeroImagePlayButton { border: none; border-radius: 1.5mm; background-color: #D8D8D8; color: black; font-family: "native:MainRegular"; font-size: 3mm; padding: 2mm 4mm 2mm 4mm; } Lead { Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 19. } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 20. margin: 0px; padding: 8mm; padding-right: 3mm; } HeroImageLogo { margin: 35mm 7mm 5mm 7mm; padding: 3.5mm; background: transparent; } HeroImagePlayButton { border: none; border-radius: 1.5mm; background-color: #D8D8D8; color: black; font-family: "native:MainRegular"; font-size: 3mm; padding: 2mm 4mm 2mm 4mm; } Lead { color: white; background: linear-gradient(0deg, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.01)); padding: 5mm 2mm 0.3mm 2mm; font-family: "native:MainRegular"; font-size: 2.4mm; } PlayNowButton { Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 21. } private void init(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { Resources r = Resources.getGlobalResources(); Toolbar tb = getToolbar(); ((Label)tb.getTitleComponent()).setIcon(r.getImage("netflix-logo.png")); // adding this just so the sidemenu and search icon appear tb.addMaterialCommandToLeftSideMenu("Placeholder", MATERIAL_AIRPLANEMODE_ON, e ->{}); tb.addSearchCommand(e -> {}); ScaleImageLabel logo = new ScaleImageLabel(lead.logo.get()); logo.setUIID("HeroImageLogo"); Button play = new Button("PLAY", MATERIAL_PLAY_ARROW, "HeroImagePlayButton"); Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 22. } HeroImagePlayButton { border: none; border-radius: 1.5mm; background-color: #D8D8D8; color: black; font-family: "native:MainRegular"; font-size: 3mm; padding: 2mm 4mm 2mm 4mm; } Lead { color: white; background: linear-gradient(0deg, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.01)); padding: 5mm 2mm 0.3mm 2mm; font-family: "native:MainRegular"; font-size: 2.4mm; } PlayNowButton { color: white; background-color: rgba(0, 0, 0, 0.6); border: 2px #ffffff cn1-round-border; padding: 2mm; font-family: "native:MainRegular"; font-size: 3.5mm; margin: 15mm 7mm 15mm 7mm; } Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 23. Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), movieList(myTitles), new Label("Recommended", "Lead"), movieList(recommended)); content.setScrollableY(true); tabs.addTab("Home", MATERIAL_HOME, 4, content); tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO")); tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO")); tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO")); add(CENTER, tabs); } private Container movieList(List<Content> lst) { Container p = new Container(BoxLayout.x()); for(Content c : lst) { Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 24. padding: 3mm; margin: 0px; } DescriptionFormButton { color: white; font-family: "native:MainLight"; font-size: 3.5mm; padding: 3mm; margin: 0px; } Tab { color: white; font-family: "native:MainLight"; font-size: 2.1mm; border: none; background-color: black; padding: 1.5mm 0.5mm 1.5mm 0.5mm; margin: 0px; } /* =============== IMAGES ============= */ ImageImports1 { background-image: url(images/data/show-logo.png), url(images/data/hero-background.jpg), url(images/data/thumb1.jpg), url(images/data/thumb2.jpg), url(images/data/thumb3.jpg), Source Listing - CSS codenameone.com github.com/codenameone/CodenameOne
  • 25. Container heroTitle = BoxLayout.encloseY(logo, FlowLayout.encloseCenter(play), new Label("Popular on Netflix", "Lead")); Style stl = heroTitle.getAllStyles(); stl.setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL); stl.setBgImage(lead.heroImage.get()); Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), movieList(myTitles), new Label("Recommended", "Lead"), movieList(recommended)); content.setScrollableY(true); tabs.addTab("Home", MATERIAL_HOME, 4, content); tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO")); tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO")); tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO")); add(CENTER, tabs); } private Container movieList(List<Content> lst) { Container p = new Container(BoxLayout.x()); for(Content c : lst) { Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 26. tabs.addTab("Home", MATERIAL_HOME, 4, content); tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO")); tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO")); tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO")); add(CENTER, tabs); } private Container movieList(List<Content> lst) { Container p = new Container(BoxLayout.x()); for(Content c : lst) { ScaleImageButton b = new ScaleImageButton(c.icon.get()); b.setUIID("ThumbIcon"); p.add(b); b.addActionListener(e -> { DetailsForm.create(c).show(); }); } p.setScrollableX(true); return p; } public static HomeForm create(Content lead, List<Content> popularTitles, List<Content> myTitles, List<Content> recommended) { HomeForm h = new HomeForm(); h.init(lead, popularTitles, myTitles, recommended); return h; } Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne
  • 27. Tabs tabs = new Tabs(); tabs.setTabPlacement(BOTTOM); Container content = BoxLayout.encloseY(heroTitle, movieList(popularTitles), new Label("My List", "Lead"), movieList(myTitles), new Label("Recommended", "Lead"), movieList(recommended)); content.setScrollableY(true); tabs.addTab("Home", MATERIAL_HOME, 4, content); tabs.addTab("Search", MATERIAL_SEARCH, 4, new Label("TODO")); tabs.addTab("Coming Soon", MATERIAL_ONDEMAND_VIDEO, 4, new Label("TODO")); tabs.addTab("More", MATERIAL_MENU, 4, new Label("TODO")); add(CENTER, tabs); } private Container movieList(List<Content> lst) { Container p = new Container(BoxLayout.x()); for(Content c : lst) { ScaleImageButton b = new ScaleImageButton(c.icon.get()); b.setUIID("ThumbIcon"); p.add(b); b.addActionListener(e -> { DetailsForm.create(c).show(); }); } p.setScrollableX(true); Source Listing - HomeForm codenameone.com github.com/codenameone/CodenameOne