Xamarin.Forms Youtube
Hello friends, Today i will try to make Youtube clone using the Xamarin.Forms. Youtube is the one of the most used video platform in the world and I think youtube has really good design. I will make the Youtube home screen design. If you want me to do any other app design please comment it. I will make the design with the parts.
Firstly, We have to use a tabbed page so i created a tabbed page which name is HomeTabbedPage and then add the children of this tabbed page. I also created a folder which name is HomeTabbedViews and add the children pages like Home Page, Discover Page…
namespace XamarinYoutube.Views
{
public partial class HomeTabbedPage : TabbedPage
{
public HomeTabbedPage()
{
InitializeComponent();
Children.Add(new HomePage());
Children.Add(new DiscoverPage());
Children.Add(new SubscriptionsPage());
Children.Add(new InboxPage());
Children.Add(new BookmarkPage());
}
}
}
After the adding page i made the title view for the screen. In the every tabbed page title Youtube use the same title view so for that i will made the design in the HomeTabbedPage.xaml. For the icons, I use FontAwesome and you can find on the internet and add the font awesome to your projects.

<NavigationPage.TitleView>
<StackLayout Orientation="Horizontal">
<Label Text=""
FontFamily="{StaticResource FontAwesomeBrands}"
TextColor="{StaticResource defaultRedColor}"
FontSize="24"
VerticalOptions="Center"
HorizontalOptions="Start"/>
<Label VerticalOptions="Center"
HorizontalOptions="StartAndExpand"
FontAttributes="Bold"
TextColor="White"
Text="YouTube"/>
<Label Text=""
FontFamily="{StaticResource FontAwesomeSolid}"
TextColor="White"
Margin="10,0,10,0"
VerticalOptions="Center"
HorizontalOptions="End"/>
<Label Text=""
FontFamily="{StaticResource FontAwesomeSolid}"
TextColor="White"
Margin="10,0,10,0"
VerticalOptions="Center"
HorizontalOptions="End"/>
<Label Text=""
FontFamily="{StaticResource FontAwesomeSolid}"
TextColor="White"
Margin="10,0,10,0"
VerticalOptions="Center"
HorizontalOptions="End"/>
<ff:CachedImage Source="ebubekir.jpg"
WidthRequest="30"
HeightRequest="30"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="0,0,5,0">
<ff:CachedImage.Transformations>
<ffTransformations:RoundedTransformation Radius="240"/>
</ff:CachedImage.Transformations>
</ff:CachedImage>
</StackLayout>
</NavigationPage.TitleView>
Now we can make the Home Page design. In the home page we can see the we just only need to use a ListView. I added a listview and then make the design and arrangements of the items using with the Grid. You can see the code below.

<ScrollView>
<ListView ItemsSource="{Binding .}"
Margin="0,10,0,0"
BackgroundColor="Transparent"
x:Name="listYoutubeVideos"
HasUnevenRows="True"
VerticalScrollBarVisibility="Never"
ItemSelected="listYoutubeVideos_ItemSelected"
SeparatorVisibility="None"
VerticalOptions="Fill"
HorizontalOptions="Center">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="0,5,0,5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ff:CachedImage Grid.Row="0"
Source="{Binding VideoPicture}"
Aspect="AspectFill"
HeightRequest="200"
VerticalOptions="Fill"
HorizontalOptions="Fill"/>
<Label Text="{Binding VideoTime}"
BackgroundColor="Black"
Grid.Row="0"
Margin="15"
VerticalOptions="End"
HorizontalOptions="End"
TextColor="White"
FontSize="Small"/>
<Grid Grid.Row="1"
VerticalOptions="Center"
HorizontalOptions="Center"
Margin="10,0,10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!--Profile Picture-->
<ff:CachedImage Source="{Binding VideoProfilePicture}"
VerticalOptions="Start"
Grid.Column="0"
WidthRequest="40"
HeightRequest="40"
Aspect="AspectFit">
<ff:CachedImage.Transformations>
<ffTransformations:RoundedTransformation Radius="240"/>
</ff:CachedImage.Transformations>
</ff:CachedImage>
<!--Video Name and Details-->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Text="{Binding VideoTitle}"
VerticalOptions="Center"
HorizontalOptions="Start"
Grid.Row="0"
FontSize="14"
TextColor="White"/>
<StackLayout Orientation="Horizontal"
Grid.Row="1">
<Label TextColor="{StaticResource defaultGrayColor}"
VerticalOptions="Center"
HorizontalOptions="Start"
LineBreakMode="TailTruncation"
FontSize="Micro">
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding VideoProfileName}"/>
<Span Text=" . "/>
<Span Text="{Binding VideoShownCount}"/>
<Span Text=" görüntülenme . "/>
<Span Text="{Binding VideoSharingDay}"/>
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
</Grid>
<Label Text=""
FontFamily="{StaticResource FontAwesomeSolid}"
VerticalOptions="Center"
HorizontalOptions="End"
TextColor="{StaticResource defaultGrayColor}"
Grid.Column="2"/>
</Grid>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollView>
For the binding, I added a YoutubeModel and created a List in the HomePage.cs. Then, I bind the List to the my listview in the home page.
public class YoutubeModel
{
public string VideoPicture { get; set; }
public string VideoProfilePicture { get; set; }
public string VideoTitle { get; set; }
public string VideoProfileName { get; set; }
public string VideoShownCount { get; set; }
public string VideoSharingDay { get; set; }
public string VideoTime { get; set; }
}

You can find the project by clicking here. If you have any question please comment it or send me a mail.
Hey Mate
Did you complete this work, would love to see the source code.
thanks
Here is the source code: https://github.com/ebubekirsezer/XamarinYoutube