Xamarin Forms - Carousel de Imagens com CardsView |
Neste tutorial vamos criar um visualizador de imagens usando os plugins CardsView e FFImageLoading para exibir um carousel de imagens no Xamarin Forms. |
Nada como um bom plugin para resolver um problema e deixar o desenvolvedor feliz. Não é mesmo ???
Ao usar um plugin fique atento no histórico de atualizações, e, confira se o mesmo esta sendo mantido e atualizado com frequência para não usar um plugin depreciado que vai quebrar o seu código.
Neste tutorial vamos usar dois plugins :
Neste exemplo vamos criar um carousel de imagens obtidas a partir de uma URL cujos dados foram definidos em um arquivo JSON. Assim teremos que acessar o arquivo JSON - DataCollectorJson.json - onde iremos definir as informações que vamos exibir.
Para deserializar as informações JSON vamos precisar do pacote Newtowsoft.Json no projeto.
Assim juntando os dois plugins e o pacote JSON vamos criar uma galeria de imagens roláveis com dados obtidos de um arquivo JSON.
recursos usados:
Criando o projeto Xamarin Forms
Abra o VS 2017 Community e clique em New Project e a seguir escolha Cross Platform -> Mobile App (Xamarin.Forms) e informe o nome XF_CardCarousel;
A seguir selecione a Plataforma (eu marquei somente Android) e escolha a estratégia de compartilhamento que será .NET Standard.
Clique no botão OK.
Pronto, nosso projeto já esta criado.
Vamos incluir agora a referência aos plugins em nosso projeto.
No menu Tools, clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;
Selecione os seguintes pacotes :
E instale-os em todos os projetos.
Ao final teremos o projeto pronto para usar os recursos que vamos tratar.
Fazendo o ajuste no projeto Android
Segundo a documentação temos que fazer a inicialização do plugin FFImageLoading incluindo a seguinte linha de código:
FFImageLoading.Forms.Platform.CachedImageRenderer.Init();
no iOS, no arquivo AppDelegate.
Para o Android inclua a seguinte linha de código:
FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer: [true]/[false]);
no método OnCreate do arquivo MainActivity.cs como mostrado a seguir:
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer:true);
LoadApplication(new App());
}
|
Definindo o modelo e o arquivo JSON
Vamos definir um modelo de domínio criando uma pasta Model no projeto e a seguir criando uma classe MainModel nesta pasta com o código abaixo:
public class MainModel
{
public string Source { get; set; }
public int Ind { get; set; }
public string Color { get; set; }
}
|
A seguir crie uma pasta chamada MetaData e crie um arquivo no formato JSON nesta pasta chamado DataCollectorJson.json com o código a seguir:
[ { "Source": "http://www.macoratti.net/Imagens/animais/tigre.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/esquilo.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/pato.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/cao1.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/cao2.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/cao3.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/tucano.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/gato.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/coelho.jpg", "Color": "White" }, { "Source": "http://www.macoratti.net/Imagens/animais/cobra.jpg", "Color": "White" } ] |
Neste arquivo definimos as propriedades Source com a url da imagem que vamos exibir e Color com a cor de fundo da imagem.
Também precisamos definir a propriedade Build Action deste arquivo como Embedded resource.
Criando uma ViewModel para obter os dados
Cria na raiz do projeto o arquivo MainPageViewModel.cs com o código abaixo:
using Newtonsoft.Json; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Reflection; using XF_CardCarousel.Model;
namespace XF_CardCarousel
public MainPageViewModel ()
private void GeraDadosImagens()
Assembly assembly = typeof(MainPage).GetTypeInfo().Assembly;
using (var reader = new StreamReader(stream))
List<MainModel> minhaListaImagens =
JsonConvert.DeserializeObject<List<MainModel>>(json); |
Criamos a propriedade ImagemInfo do tipo ObservableCollection para o MainModel.
A seguir no construtor chamamos o método GeraDadosImagens que acessa o arquivo JSON e retorna as informações das imagens a exibir.
Criando a interface com o usuário
Abra o arquivo
MainPage.xaml e Inicialmente
incluia os seguintes namespaces:
xmlns:controls="clr-namespace:PanCardView.Controls;assembly=PanCardView"
xmlns:cards="clr-namespace:PanCardView;assembly=PanCardView"
xmlns:ffimage="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
Abaixo o código completo:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XF_CardCarousel"
xmlns:controls="clr-namespace:PanCardView.Controls;assembly=PanCardView"
xmlns:cards="clr-namespace:PanCardView;assembly=PanCardView"
xmlns:ffimage="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
BackgroundColor="Black"
x:Class="XF_CardCarousel.MainPage">
<ContentPage.BindingContext>
<local:MainPageViewModel/>
</ContentPage.BindingContext>
<cards:CarouselView
ItemsSource="{Binding ImagemInfo}"
SlideShowDuration="3500"
SelectedIndex="{Binding CurrentIndex}">
<cards:CarouselView.ItemTemplate>
<DataTemplate>
<ContentView>
<Frame
VerticalOptions="Center"
HorizontalOptions="Center"
HeightRequest="300"
WidthRequest="300"
Padding="0"
HasShadow="false"
IsClippedToBounds="true"
CornerRadius="10"
BackgroundColor="{Binding Color}">
<ffimage:CachedImage Source="{Binding Source}"/>
</Frame>
</ContentView>
</DataTemplate>
</cards:CarouselView.ItemTemplate>
<controls:IndicatorsControl ToFadeDuration="1500"/>
<controls:LeftArrowControl ToFadeDuration="2500"/>
<controls:RightArrowControl ToFadeDuration="2500"/>
</cards:CarouselView>
</ContentPage>
|
No código estamos vinculando o BindingContext ao nosso ViewModel, e, a seguir definimos a exibição das imagens no Cards.
Observe que usamos CachedImage que faz o papel da classe Image para acessar e exibir as imagens.
Executando o projeto iremos obter o seguinte resultado:
Pegue o código do projeto compartilhado aqui : XF_CardCarousel.zip
"Não sejais
vagarosos no cuidado; sede fervorosos no espírito, servindo ao Senhor;
Alegrai-vos na esperança, sede pacientes na tribulação, perseverai na oração;"
Romanos 12:11,12
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
NET - Apresentando o padrão Model-View-ViewModel - Macoratti.net
Xamarin Forms - MVVM - Macoratti.net
NET - O padrão MVVM (Model-View-ViewModel) revisitado - Macoratti
Xamarin Forms - MVVM - A interface ICommand - Macoratti.net
Padrão de Projeto - Aprendendo o padrão MVVM ... - Macoratti.net