Xamarin
Android - Criando um cronômetro
![]() |
Neste artigo vamos criar um cronômetro usando o Xamarin Android. |
![]() |
Neste artigo vamos criar um cronômetro usando os recursos básicos do Xamarin Android e a linguagem C#.
Recursos usados:
Visual Studio Community 2017 ou Xamarin Studio
Criando o projeto no VS Community 2017
Abra o VS 2017 Community e clique em New Project;
Selecione a linguagem Visual C# e o template Android -> Blank App(Android)
Informe o nome DroidCronometro e clique no botão OK;
Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer e a seguir inclua a partir da ToolBox os seguintes controles:
Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :
![]() |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_dark"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="0:00:00"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40sp"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp"
android:layout_gravity="center_horizontal"
android:id="@+id/textTimer" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:text="Iniciar"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"
android:layout_height="wrap_content"
android:id="@+id/btnIniciar" />
<Button
android:text="Pausar"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"
android:layout_height="wrap_content"
android:id="@+id/btnPausar" />
<Button
android:text="Registrar"
android:layout_width="0dp"
android:layout_weight="1"
android:background="@android:color/holo_green_dark"
android:layout_height="wrap_content"
android:id="@+id/btnRegistrar" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/container" />
</ScrollView>
</LinearLayout>
</LinearLayout>
|
Observe que utilizamos o LinearLayout para dispor os botões alinhados horizontalmente.
O controle ScrollView será usado como contâiner para exibir outra view usando o recurso de Fragments.
Podemos pensar nos Fragments como módulos de interface. Eles permitem que o desenvolvedor divida a interface do usuário em partes isoladas, reutilizáveis que podem ser executadas em atividades separadas. Em tempo de execução, as atividades em si vão decidir quais Fragments usar.
Usando o recurso Fragments podemos dividir nossa tela e dar comportamento a cada pedaço (fragmento) de uma view com um Fragment.
Criando o Layout row
Vamos criar outro Layout na pasta layout selecionando a pasta e no menu Project escolhendo o template Android Layout e informando o nome row.axml:

A seguir selecione o arquivo row.axml e inclua a partir da ToolBox o controle
Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XAML gerado :
![]() |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#340e62"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="0:00:000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtTempo" />
</LinearLayout>
|
Implementando o código na MainActivity
Agora vamos definir o código no arquivo MainActivity.cs vinculado a nossa view Main.axml e usar a view row.axml usando fragments para exibir os tempos do cronômetro.
using Android.App;
using Android.Widget;
using Android.OS;
using System.Timers;
using Android.Views;
using Android.Content;
namespace DroidCronometro
{
[Activity(Label = "DroidCronometro", MainLauncher = true)]
public class MainActivity : Activity
{
Button btnIniciar, btnPausar, btnRegistrar;
TextView txtTimer;
LinearLayout container;
Timer timer;
int mins = 0, segs = 0, milesegs = 1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
btnIniciar = FindViewById<Button>(Resource.Id.btnIniciar);
btnPausar = FindViewById<Button>(Resource.Id.btnPausar);
btnRegistrar = FindViewById<Button>(Resource.Id.btnRegistrar);
container = FindViewById<LinearLayout>(Resource.Id.container);
txtTimer = FindViewById<TextView>(Resource.Id.textTimer);
btnIniciar.Click += BtnIniciar_Click;
btnPausar.Click += BtnPausar_Click;
btnRegistrar.Click += btnRegistrar_Click;
}
private void btnRegistrar_Click(object sender, System.EventArgs e)
{
LayoutInflater inflater = (LayoutInflater)BaseContext.GetSystemService(Context.LayoutInflaterService);
View addView = inflater.Inflate(Resource.Layout.row, null);
TextView txtConteudo = addView.FindViewById<TextView>(Resource.Id.txtTempo);
txtConteudo.Text = txtTimer.Text;
container.AddView(addView);
}
private void BtnPausar_Click(object sender, System.EventArgs e)
{
timer.Stop();
timer = null;
}
private void BtnIniciar_Click(object sender, System.EventArgs e)
{
timer = new Timer();
timer.Interval = 1;
timer.Elapsed += Timer_Elapsed;
timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
milesegs++;
if(milesegs>=1000)
{
segs++;
milesegs = 0;
}
if(segs==59)
{
mins++;
segs = 0;
}
RunOnUiThread(() =>
{
txtTimer.Text = string.Format("{0}:{1:00}:{2:000}", mins, segs, milesegs);
});
}
}
}
|
No botão Registrar estamos usando a classe LayoutInflater que instancia um arquivo XML de layout em seus objetos View correspondentes.
O método inflate() usa três argumentos:
Este é o modo de criar um fragmento que fornece um layout.
Executando o projeto e fazendo algumas medições de tempo iremos obter o seguinte resultado:

Pegue o projeto aqui :
DroidCronometro.zip (sem as referências...)
E a vida eterna é esta: que te conheçam, a ti só, por único Deus verdadeiro, e a
Jesus Cristo, a quem enviaste.
João
17:3
|
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
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
![]()
Xamarin Android - Apresentando e usando Fragments - Macoratti.net