sexta-feira, 4 de novembro de 2011

Android e iOS em perigo??

Boa tarde leitores,

Hoje lendo as notícias diárias, li no site do Terra uma notícia que de certa forma é um pouco preocupante para desenvolvedores mobile que trabalham APENAS com Android/iOS.

O Windows lançou seu sistema operacional Windows Phone 7.5 que promete entrar na briga pelo mercado dominado pela Google e Apple.

Eu não sou entusiasta do Windows, mas sei que o mundo hoje é 60% ou mais Windows e o restante dividido entre outros. Com tanto poder, o Windows pode causar uma virada de mesa brusca no mercado mobile tornando-se rapidamente o sistema operacional mais utilizado no mercado. Apenas o tempo poderá dizer se o Windows realmente vai ser superior (a experiência que tive com um Windows Phone num celular da Samsung foi péssima!!).

Para os desenvolvedores fica mais uma vez o aviso de ser multi-linguagem trabalhando com iOS, Android e Windows Phone sem deixar que preconceitos com sistema operacional sirva como barreira para não fazê-lo.

Abaixo segue a matéria tirada do site do Terra.com falando sobre algumas das vantagens do novo Windows Phone.


"O Windows Phone 7.5, mais conhecido pelo codinome "Mango", chegou ao Brasil em 21 de outubro pela HTC, com o smartphone Ultimate. O sistema operacional, lançado pela Microsoft em maio, é a grande aposta da gigante do software para entrar em um mercado dominado pelo Google, com seu Android, e pela Apple, com seu iPhone.
O site americano Business Insider listou nove características em que o sistema operacional da Microsoft supera o iOS 5, que roda nos iPhones, indicando que o Windows Phone 7.5 tem munição para entrar com categoria nessa briga. Confira:
1. Widgets
Enquanto os widgets -pequenos aplicativos com funcionalidades na tela inicial do aparelho - do Android acabam com a vida da bateria dos smartphones, o iOS 5 enm widgets tem. Os "Live Tiles" (algo como blocos interativos) do Windows Phone, por outro lado, funcionam como widgets, atualizando clima, notícias e status do Facebook na tela inicial, sem comprometer o consumo de bateria.

2. Contatos
A lista de contatos do iOS tem sido pouco atualizada nos últimos anos. No Mango, no entanto, a funcionalidade tem diversos recursos e mostra informações como mural do Facebook e uma lista da interação recente entre os amigos.

3. Pesquisa por imagem
Para fazer uma pesquisa por imagem ou uma varredura de códigos de barras com o iOS, é preciso um aplicativo específico, enquanto no Windows Phone 7.5 isso acontece simplesmente pressionando a tecla de pesquisa no aparelho.

4. Redes sociais
A integração do Twitter com o iPhone é muito rudimentar, ao contrário do Mango, onde o usuário pode compartilhar conteúdo na rede de microblogs (ou outras mídias sociais) na tivamente, a partir do aplicativo Hub People.

5. Multitarefa
Enquanto no iOS 5 o usuário consegue visualizar apenas pequenos ícones dos aplicativos que estão rodando no aparelho, o Windows Phone 7.5 mostra screenshots dos programas para que o usuário tenha uma noção do real das tarefas que estava realizando em cada um dos apps.

6. Facebook
O bate-papo nativo do Facebook no Mango funciona muito bem. Ele integra no mesmo aplicativo SMS, o chat da rede de Zuckerberg e Windows Live Messenger, e permite mudar de uma funcionalidade para outra.

7. Microsoft Office
Uma função em que o sistema operacional da Microsoft iria se sair melhor, sem sombra de dúvida, seria a integração com uma das suítes de escritório mais usadas no mundo: o Office. O aparelho tem suporte nativo ao Office, permitindo abrir documentos do Word e Excel sem pagar nada mais por isso.

8. Customização
O Mango permite customizar a página inicial fixando seus aplicativos favoritos. No caso do Facebook, por exemplo, o usuário pode optar por "favoritar" suas mensagens ou os eventos, deixando para o usuário a decisão das coisas que quer ter com acesso mais fácil.

9. Bateria
Os aparelhos com Windows Phone tem escelentes recursos de gerenciamento de baterias. Os usuários do iOS 5, por outro lado, vêm reclamando desde o lançamento do sistema operacional sobre a pouca duração da bateria, problema que a Apple admitiu na quinta-feira, e promete corrigir com o pacote de atualizações.
" (notícia retirada do site Terra.com. Clique aqui para ler na íntegra.)

quinta-feira, 27 de outubro de 2011

Programa Oi Inovação

Boa noite leitores,

Hoje vi no Twitter uma ótima oportunidade para desenvolvedores Mobile. A Empresa de telefonia móvel Oi iniciou um projeto que irá selecionar os melhores aplicativos mobile com foco nas Olímpiadas e na Copa do Mundo que teremos nesses próximos anos. Vale a pena conferir e quem sabe até se candidatar.

Para isso, acesse o link http://www.oi.com.br/ArquivosEstaticos/oi/Programa-Oi-Inovacao/index.html

quarta-feira, 26 de outubro de 2011

A simplicidade de Angry Birds alavanca seu sucesso?

Bom dia leitores,

Desculpem a demora em postar novamente, mas o trabalho, a faculdade, meu livro (Territórios), meus estudos particulares e minha vida social tem tornado quase impossível postar. Eu sei que ainda estou devendo a última parte do BrainTrainer, mas prometo que logo que tiver um pouco mais de tempo, voltarei a postar com maior regularidade.

Hoje, no entanto, resolvi falar um pouco sobre Angry Birds da Rovio e do seu enorme sucesso, tanto que até foi confirmado uma versão cinematográfica da guerra entre "passarinhos" e "porquinhos".

Consegui no serviço um celular com Android e resolvi testar o famoso jogo que todos falavam a respeito chamado Angry Birds. Tratando o jogo cruamente, nada no Angry Birds seria sinônimo de sucesso nos dias atuais. O gráfico é no estilo "desenhando a mão" e sem muita diversidade de cores o que há muito tempo já foi substituído pelas milhares de cores que nem ao menos tenho capacidade de diferenciar. A complexidade do jogo também é extremamente simples. Seu objetivo é destruir os porquinhos malvados que roubaram os ovos dos passarinhos. Simples, não?

Pois é. Angry Birds, na verdade, não passa de um jogo casual, mas como um jogo casual alcançou tanto os jogadores casuais quanto até mesmo os hardcores. E o segredo disso pode ser justamente o simples.

Como jogador, tenho saudades dos antigos clássicos como Mario e Sonic. Contudo, também não posso deixar de entender a mudança de aspectos dos jogos porque tudo muda. O que me desanima bastante nos jogos atuais é o fracasso em mesclar excelentes gráficos com jogabilidade divertida, sons estonteantes e viciantes, etc.

Angry Birds não tem os gráficos de última geração, mas a 'tosquice' dos gráficos o torna tão divertido que até mesmo já existem bichinhos de pelúcia dos Angry Birds. Os sons não são trilhas sonoras de orquestras sinfônicas, mas os efeitos são engraçados aproximando-se aos de Worms. A jogabilidade é extremamente simples, basta "puxar" o passarinho no estilingue e lançá-lo nos  porquinhos. No entanto, os ladrõezinhos estão, na maioria das vezes, em lugares bem complicados de serem pegos.

Por isso, para quem gosta de jogos, Angry Birds faz juz ao sucesso repentino. Outro ponto positivo é o preço. Na AppStore, com apenas $0,99 você pode adquirir o jogo enquanto no Google Market ele é gratuito (logicamente é necessário ter os respectivos sistemas operacionais para rodar o jogo).

Link para baixar Angry Birds no Android Market.
Link para baixar Angry Birds no AppStore.

NOTAS:

Trilha sonora: 7
Efeitos sonoros: 9
Jogabilidade: 10
Gráficos: 9
Média: 8,75

Matéria do blog "Profissionais de TI" animam bastante os desenvolvedores Mobile

Bom dia leitores,

Hoje lendo as notícias no blog "Profissionais de TI", fiquei muito animado com uma delas referentes ao mercado Mobile. Para nós, tanto programadores para Android quanto para iOS ou outros, é uma notícia excelente.

Não deixem de visitar a matéria postada na íntegra através do link: http://www.profissionaisti.com.br/2011/10/vale-a-pena-investir-na-carreira-de-desenvolvedor-mobile/


Abaixo segue a matéria completa.

"O setor de tecnologia da informação sofre com a falta de profissionais qualificados. Como esta é uma área em constante inovação, surgem novas necessidades e, por consequência, novas ‘profissões’. Uma carreira que está em expansão e já sente – e muito – a carência de profissionais é a de desenvolvedor de aplicativos para aparelhos móveis.
Atualmente, o mercado de TI emprega 1,2 milhão de pessoas, mas faltam cerca de 90 mil profissionais, segundo dados da Associação Brasileira de Empresas de Tecnologia da Informação e Comunicação (Brasscom). É grande o déficit no setor e se o quadro atual se mantiver, em 2013, serão 200 mil vagas em aberto.
Para os desenvolvedores mobile os números também são impressionantes. Em um estudo intitulado America’s Tech Talent Crunch, o site de carreira em TI www.dice.com descobriu que os anúncios de emprego para desenvolvedores em Android aumentaram 302% no primeiro trimestre de 2011 em relação ao mesmo período do ano passado. Já para desenvolvedores em iPhone, as vagas cresceram 220%.
Os números mostram que há muitas oportunidades no setor e este crescimento não é por acaso. Desde o ano passado houve um boom de smartphones e tablets. Os aparelhos móveis estão cada vez mais populares, no Brasil e em todo o mundo, e há a necessidade de criar softwares para estes dispositivos. As empresas precisam oferecer facilidades e diferenciais aos consumidores para se destacarem.
Companhias dos mais variados segmentos também já descobriram os benefícios que a mobilidade pode trazer e, por isso, há demanda por desenvolvedores de aplicativos móveis corporativos. Além dos eventos mundiais que acontecerão no Brasil – a Copa, em 2014, e os Jogos Olímpicos, em 2016 –, que têm incentivado os investimentos em tecnologia e, consequentemente, em mobilidade.
Para suprir esta ausência de profissionais, as empresas vêm buscando algumas alternativas. A contratação de pessoas com algum conhecimento em desenvolvimento de sistemas para capacitá-las internamente para atuar com os aplicativos móveis é uma delas. Outras organizações têm optado por terceirizar partes dos projetos para outros países, como a Índia e a China.
Mas é claro que seria bem melhor se as vagas fossem ocupadas por profissionais brasileiros. Os que não querem perder estas oportunidades devem estar dispostos a estudar muito para acompanhar o mercado. Estar atualizado e entender de negócios e processos também são requisitos básicos, principalmente, para quem pretende trabalhar em grandes empresas. Outro quesito avaliado na hora de contratar é o conhecimento nas linguagens .Net e Java, J2ME, Objective C (iPhone e iPad), além do conhecimento de Banco de Dados.
A TI é uma área que oferece boa remuneração e com a carência de profissionais os salários ficam ainda mais atrativos. Para os desenvolvedores mobile, os valores variam entre R$ 180,00 a R$ 220,00 por hora. Também há oportunidades para trabalhar com projetos que custam entre R$ 20 mil e R$ 60 mil em média – mas estes números podem ser maiores dependendo do tamanho da Aplicação.
Para trabalhar com TI é necessário investir na carreira porque a profissão exige o conhecimento da técnica. O ideal é ter um conhecimento geral da área e se especializar em algum setor. A carreira de desenvolvedor de aplicativos para aparelhos móveis está em alta e a tendência ficar cada vez mais aquecida, afinal, a venda de tablets e smartphones só aumenta. Vale a pena investir nesta profissão!
Por João Moretti, diretor geral da MobilePeople – empresa especializada em soluções móveis corporativas."

sexta-feira, 23 de setembro de 2011

Nvidia - Projeto Kal-El: Glowball

Boa tarde a todos,

J'a faz um bom tempo que n~ao posto nada, n~ao e'?

Bom, estou com pouco tempo e ainda sem internet em casa, por isso n~ao consigo mais postar. Hoje, como 'e sexta e sendo uma exceç~ao, resolvi postar algo. No entanto, vou ser breve. At'e porque n~ao tem muito o que comentar sobre o v'ideo de demonstraç~ao do demo do projeto Kal-El chamado Glowball

'E sinceramente fant'astico.


sexta-feira, 16 de setembro de 2011

Square-enix reavivando grandes clássicos para Android

Boa tarde leitores,

Como amante dos antigos rpgs como Chrono Trigger, Secret of Mana, Final Fantasy entre tantos outros da geração do SuperNes, foi com grande satisfação que li a notícia no TechCrunch sobre o projeto da Square de desenvolver para o Android alguns dos seus grandes clássicos, em especial Chrono Trigger, o qual joguei milhares de vezes "zerando" e conhecendo todos os possíveis finais muito mais de uma vez.

Espero que o lançamento ocorra logo e que minha tablet também não tarde muito a chegar, afinal a greve dos Correios acabou me pegando em cheio...

Abaixo algumas informações sobre Chrono Trigger com algumas imagens. Espero que curtam e para ler a notícia na íntegra, clique aqui.

História tirada da Wikipedia:
O jogo tem inicio no Reino Guardia, no ano 1.000 AD, Crono é acordado por sua mãe e logo depois ele vai para a Feira do Milênio. Lá, ele conhece uma garota chamada Marle, que se torna sua amiga, e passam a andar juntos.
Na feira eles são convidados a testar a nova invenção de Lucca, melhor amiga de Crono. Essa maquina é um teletransporte, que Crono testa com sucesso, porém Marle ao testa-la, observa que o seu pingente começa a brilhar no instante do funcionamento da máquina, e, de repente, ela é sugada para dentro de um misterioso portal. Lucca então verifica que um portal dimensional foi aberto e Crono decide ir atras de Marle. Ao sair do portal Crono está na "Idade Média" (Middle Ages, 600 DC), onde ele descobre que está no passado e se dirige ao castelo de Guardia. Lá fica sabendo que a 'Rainha Leene, que estava desaparecida, foi encontrada.
Contudo ele descobre que a Rainha Leene encontrada, era na verdade Marle. Lucca também vem para essa época e Marle começa a desaparecer do seu plano de existência. Lucca conclui que Marle na verdade era a Princesa Nadia do tempo deles, e provavelmente uma descendente da Rainha Leene. Como a corte de Guardia encontrou Marle pensando ser Leene, as buscas pela rainha foram suspensas, o que levaria a morte de Leene em um futuro próximo, e por consequência, a de sua descendência inteira, incluindo a própria Marle. Crono e Lucca vão então em busca da verdadeira rainha, para então consertar a história. Eles conseguem cumprir a missão com a ajuda de Frog, um homem-sapo.
Usando a Gate Key de Lucca, Crono leva Marle de volta ao Castelo Guardia de seu tempo. Entretanto, o Chanceler de Guardia acusa Crono de tentar sequestrar a princesa. Como resultado, o chanceler condena Crono à morte. Com a ajuda de Lucca, ele consegue fugir da prisão, e Marle foge junto com eles para um portal que estava escondido na floresta que rodeia o castelo.
Viajando no portal, eles vão parar no futuro (2.300 D.C.), onde o mundo está em ruínas. De um computador dessa época eles vêem um vídeo do ano de 1999 A.D., que mostra um parasita alienígena, chamado Lavos, emergindo do fundo do planeta, e o destruindo completamente. Então, Marle convence Crono e Lucca a continuarem a viajar pelo tempo, a fim de evitar que Lavos destrua o futuro.
Pelo desenrolar do jogo novos amigos entram no time de Crono, como o robô nomeado Robo, uma mulher da pré-história chamada Ayla, e um homem-sapo chamado Frog. Opcionalmente, Magus, um dos antagonistas do jogo, pode entrar no time.

Capa do original para Super Nes


Entrada do jogo


A diversidade de finais e a história de cada personagem são um dos pontos fortes do jogo

Batalha final contra Lavos

 É isso. Para quem tiver a oportunidade de jogar Chrono Trigger, não a deixe escapar. O jogo está no patamar máximo tratando-se de games rpg.

Mais um grande abraço

RPG Destinia para Android

Bom dia leitores,

Ontem vi uma notícia muito legal e gostaria de ter postado ontem, mas como não foi possível devido a falta de tempo, decidi postar hoje sobre um rpg de produção do Gamevil's e que deve ser lançado em breve apesar de nenhuma data ter sido definida.

Destinia é um jogo de RPG também voltado a ação tornando as batalhas mais dinâmicas. No jogo, o jogador é Duke, um soldado imperial que foi preso após não acatar uma ordem imperial de assassinar civis inocentes. Na prisão, Duke é tratado pela princesa Cristal até se recuperar completamente. Os dois decidem formar uma aliança para escaparem da prisão e lutar contra o império. Quando Duke volta à sua cidade natal na esperança de encontrar sua paixão de infância, Lena, ele descobre que sua cidade foi brutalmente ocupada pelas forças imperiais. Por todo o caminho de Duke, perigos inimagináveis espreitam prontos para acabar com a vida do nosso herói.

Para aqueles que gostam de disputar contra os amigos, um sistema de PvP pode render alguns instantes de diversão e zoação com o amigo mais fraco.

Para aumentar "um pouco mais" a cascata de saliva que deve estar saindo da boca de vocês, aqui vai algumas imagens retiradas do site oficial do jogo (us.gamevil.com) e também um vídeo.

Boa diversão!

P.S) As imagens e vídeo referem-se a versão para iPhone e iPod Touch, mas espero que a versão do Android não deixe a desejar para dos seus "primos"














quinta-feira, 15 de setembro de 2011

Jogo BrainTrainer para Android – Parte 2

Bom dia a todos,

Primeiro de tudo, desculpem a demora aí de quase uma semana para postar a segunda parte do tutorial de como montar um jogo no estilo BrainTrainer apenas utilizando elementos que já falamos aqui no blog e alguns conceitos de programação, mas minha rotina está uma doidera e quase não tive tempo de estudar Android, que o diga montar um post mais elaborado, mas agora vamos para o que interessa: o Layout!

Lembrando que sou péssimo em layout, então se vocês, leitores, acharem melhor trabalhar de uma outra maneira o layout, sem problemas. Aqui passo apenas o básico, no meu caso tratando-se de layout, seria meu avançado ¬¬


Vamos listar os elementos que teremos:
    • Um campo <TextView> para a String “Score:”;
    • Um campo <TextView> que exibirá o valor da pontuação do jogador;
    • Um campo <TextView> que exibirá o valor referente ao primeiro número;
    • Um campo <TextView> que exibirá o sinal da operação de acordo com o que tiver sido sorteado;
    • Um campo <TextView> que exibirá o valor referente ao segundo número;
    • Um campo <EditText> para o usuário digitar a resposta;
    • Um campo <Button> onde o usuário irá clicar para enviar a resposta ao sistema e este iniciar as verificações.
Primeiro iremos pensar nos dois campos que se referem a String “Score:”. Iremos colocá-los lado a lado. Ou seja, precisaremos de uma maneira de ao invés de alinhá-los verticalmente, alinhá-los horizontalmente. Para isso, iremos criar dentro do principal, outro com uma pequena diferença: ao invés de utilizarmos o atributo android:orientation=“vertical”, utilizaremos o valor da orientação do layout como horizontal resultando [i]android:orientation=“horizontal”.

Dentro desse layout iremos adicionar os dois referentes a pontuação do jogador. Atente no fato de que precisamos criar um nome de 'id' para o que exibirá o valor da pontuação do jogador. No meu caso, utilizei o nome 'score_text', mas isso fica de acordo com cada um, lembrando que alterando o nome do 'id' no main.xml o nome no código-fonte também deverá ser alterado. O código xml ficará similar ao da imagem abaixo:

Layout 'header' com orientação horizontal e dois

Certo. Então criamos o 'header' do nosso jogo. Agora precisamos criar o corpo dele no qual será exibido os dois números juntamente com o sinal da operação.

Como no passo anterior, precisaremos criar um com orientação 'horizontal'. Isso porque queremos que apareça o primeiro número, ao lado dele o sinal e do lado do sinal mostraremos o segundo número. O código fica semelhante ao do layout anterior, por isso não irei explicar detalhado.

Layout 'body' com orientação horizontal e três




E por último nosso layout onde estará o <EditText> e o <Button>. Contudo, o <LinearLayout> que utilizaremos para os dois componentes citados terá a orientação 'vertical' assim como seu pai.

Layout 'user' com orientação vertical, um <EditText> e um <Button>


Agora sim. Depois de terminarmos nosso layout podemos rodar o código e ver como ficou. Provavelmente algo semelhante a imagem abaixo será exibido e se você chegou até aqui, agora é só programar as funcionalidades e teremos um BrainTrainer básico para jogar.

Layout final



Até a próxima e um grande abraço para todos.

terça-feira, 13 de setembro de 2011

Promoção HostDime 5 anos - Concorra a um iPad2 e muitos outros prêmios

Boa tarde leitores,

Hoje comecei a participar de uma promoção na HostDime e gostaria de pedir a ajuda de vocês para ganhar o prêmio (iPad2 e hospedagem de graça).

Basta clicar aqui e acessar o site do HostDime


segunda-feira, 12 de setembro de 2011

Votem "Dancing Android Robot Man" p/ o quadro Dança dos Famosos





Não deixem de votar para o android participar do próximo "Dança dos Famosos" \o/

O marcante R-Type retorna agora para Android


É nostálgico, eu sei. Para quem viveu nos anos 90 e teve a oportunidade de conhecer R-Type, um jogo futurista com gráficos ótimos para a época, com certeza entendem quando digo que quase senti lágrimas escorrerem pelos meus olhos ao deparar com a notícia que R-Type estará disponível para Android.

Capa do jogo R-Type



R-Type foi produzido em 1987 (isso mesmo, bem no ano que nasci) e, pelo menos para mim, conheceu sua época de ouro nos anos 90. Ainda que hoje em dia os gráficos estejam muito defasados, R-Type tem o que muitos jogos da época passada tem: simplicidade caminhando junto com a diversão. Não estou dizendo que os jogos de hoje são chatos, até porque no post anterior publiquei um jogo atual (Muffin Knight), mas também não sou muito fã de jogos 3D.



Como a maioria dos jogos antigos, zerá-lo era quase uma epopéia. Nunca consegui apesar de passar horas na frente da TV e ficar de castigo sem recreio e sem poder brincar na rua por não fazer as tarefas de casa passadas pelas professoras.



Para fãs de jogos com menos de 20 anos e que não chegaram a conhecer R-Type, recomendo. Também para os mais velhos que nunca jogaram irão se surpreender.

sábado, 10 de setembro de 2011

Muffin Knight

Bom dia leitores,

Não vai ser hoje que irei postar a segunda parte do jogo BrainTrainer que havia prometido. Irei explicar o motivo:

Essa semana tem sido muuuito corrida. Outra coisa foi que resolvi tentar mais uma vez utilizar o eclipse para desenvolver para Android e pasmém: não é que eu consegui?!

Pois é, então vou deixar o MotoDev Studio um pouco de lado já que adoro programar no eclipse.

Também tenho uma ótima novidade (pelo menos pra mim):

COMPREI UM TABLET COM ANDROID!!!
Ainda não é definitivo já que comprei no mercado livre e o pagamento vai ser feito apenas na segunda, mas mesmo assim estou muito ansioso para começar a testar minhas aplicações nele.
O tablet é o Tablet Orange Tb002 - Android 2.1 Wifi 3g. Espero que ele seja bom =D


Mas vamos ao assunto do post. Irei falar sobre um jogo que vi ontem e me pareceu ser muito divertido. Vocês logo perceberão que sou fã de jogos 2D e tenho certa birra com jogos em 3D (tudo bem, sei que é errado, mas os 2D são muito mais divertidos).



O jogo se chama Muffin Knight ou traduzindo para o português: Cavaleiro Muffin. Para quem não sabe, Muffin são aqueles bolinhos pequeninos que parecem mais mini-bolos...não sei muito bem como explicar, então aí vai uma imagem, mas nada de babar em cima do teclado.


Delícia de Muffin!!!!


Pois é, delícia não?

Muffin Knight, pelo vídeo também parece ser uma delícia de jogo. No jogo você é um cavaleiro e à medida que você recolhe os Muffins nas diversas fases, novos poderes e transformações são permitidas ao personagem. Os controles são simples tendo apenas o pulo e atacar.

Abaixo segue o vídeo do jogo e clique aqui caso queira ler a resenha feita pelo site Androinica.com







quinta-feira, 8 de setembro de 2011

GetJar Gold disponibiliza apps free

Boa tarde leitores,

Eu sei que hoje já postei, mas não podia deixar passar essa excelente notícia para quem curte o Android.

Pouco depois da Amazon anunciar a promoção da sua AppStore na qual eles darão créditos aos desenvolvedores de apps para Android, o site GetJar anunciou que irá oferecer apps grátis para os usuário do Android. No entanto, para quem pensa que serão oferecidos apenas apps de qualidade duvidosa estarão enganados, pois títulos consagrados como AngryBirds estará disponível para download free.

Como não sei se isso irá durar muito tempo, é melhor aproveitar e já baixar as apps desejadas.

Para ler a notícia oficial, basta acessar o link clicando aqui.

Um grande abraço a todos.

Jogo BrainTrainer para Android - Parte 1


Bom dia a todos,

Neste post iremos falar sobre como fazer um joguinho no estilo BrainTrainer, ou traduzindo ao pé da letra, Treinador de Cérebro. Para não ter que ficar dando print das telas, irei postar o código inteiro para download. Assim também facilitamos o tráfego no blog. Outro ponto importante é que iremos dividir o assunto deste post em três. No primeiro iremos discutir um pouco sobre o estilo de jogo ao qual BrainTrainer segue. No segundo, montaremos o layout do game, isto é, codificaremos o arquivo 'main.xml'. Aqui gostaria de deixar uma ressalva: eu sou péssimo em layout, então o jogo, como vocês poderão notar, irá ficar com uma cara péssima, mas a jogabilidade ficará boa (assim espero). E por último iremos tratar do código da classe principal.

Então vamos falar um pouco sobre o BrainTrainer e a ideia que seguiremos para implementar nosso jogo, afinal é muito importante antes de começar a programar, definir o que será implementado, as funcionalidades e outras coisas que no meio da implementação pode nos dar dor de cabeça caso não a tenhamos definido de maneira sucinta.

BrainTrainer, em linhas gerais, consiste num jogo de perguntas rápidas no qual o usuário deve responder o mais rápido que conseguir, logicamente acertando as questões. No nosso game, no entanto, não iremos trabalhar com um limite de tempo, mas caso você, leitor, deseje tornar o jogo mais desafiante, pode fazê-lo facilmente apenas com o conhecimento em Java e na classe Timer. Já joguei jogos nesse estilo desde memorizar sequências a fazer cálculos e meu preferido era justamente o último citado. Então vamos definir alguns pontos importantes do nosso jogo:
    • Teremos dois números que serão sorteados aleatoriamente num intervalo de 1 ao 10. Podemos mais tarde aumentar esse intervalo para tornar o desafio mais difícil, contudo vamos deixar com esse intervalo mesmo.
    • A definição da operação também deverá ser aleatória. Iremos trabalhar com três delas, então precisaremos sortear entre três números, no qual cada um representará uma determinada operação.
    • O jogo terá uma pontuação. Para facilitar, faremos com que a pontuação seja incrementada em 50 nos acertos e decrementada o mesmo tanto nos erros.
    • Um campo de entrada para o usuário digitar a resposta da expressão que será sorteada.

Nosso jogo será basicamente isso, então para implementá-lo, iremos utilizar duas variáveis para armazenar cada número sorteado separadamente. Outra variável irá armazenar o “valor” do sinal da expressão. Como teremos um “score”, iremos precisar de uma variável para armazenar o valor correspondente.

Definido os elementos do nosso jogo, poderemos passar para o layout que será visto no próximo post. Uma ótima semana para todos.

Abraços.

terça-feira, 6 de setembro de 2011

Jogo Password para Android


Olá leitores,

Como prometido, hoje irei fazer jus ao nome do blog. Iremos criar um joguinho simples conhecido como senha utilizando os elementos que trabalhamos no post anterior. Então mãos à obra.

Primeiro precisamos trabalhar nosso esquema de jogo. Sabemos que teremos que “sortear” um conjunto de números, esses números variam de 0 (zero) ao 9 e podem se repetir. Teremos que “pegar” de alguma maneira a sequência de números digitados pelo usuário e compará-los a cadeia de números que representam nossa senha. Depois de comparar, caso o usuário tenha acertado, informamos que ele venceu o jogo. Caso erre, precisamos mostrar ao usuário as seguintes informações:
  • Número existe e está na posição correta;
  • Número existe mas está na posição incorreta;
  • Número não existe.

Definindo nosso esquema de jogo, podemos começar a pensar no layout.

No meu caso, eu escolhi enviar uma mensagem ao usuário informando as regras do jogo. Em seguida, teremos mais uma mensagem indicando a sequência secreta. É importante anotar aqui que essa sequência precisa ser secreta. Ou seja, precisamos mascará-la. Como faremos isso mostrarei no código no momento que chegarmos na parte respectiva. Após os dois textos, iremos inserir uma campo de entrada onde o usuário deverá digitar a sequência que ele imagina ser a secreta. Mais uma importante anotação: A sequência secreta são números de 0 (zero) ao 9, então devemos restringir os valores de entrada para estes números. Também veremos como fazer isso através do código. Por último, acrescentaremos o botão de confirmação. Agora vamos para o código do arquivo “main.xml”.

Tutorial explicando o jogo


Texto que irá "exibir" a sequência secreta


Campo de entrada do usuário



Botão de confirmação



Na primeira imagem, não há muita novidade assim como na quarta. Na segunda, adicionamos um 'id' ao <TextView>. Na terceira definimos nossos dados de entrada como dígitos de 0 (zero) ao 9 através da linha 'android:digits=“0123456789”'. Esse fato é importante porque senão poderíamos adicionar letras e símbolos, o que não é do nosso interesse, pelo menos nessa fase.

Depois de trabalhar nosso layout, está na hora de partirmos para o arquivo .java, podemos também executar o app para vermos como está nosso layout.


Teremos que importar todas as bibliotecas que importamos no post passado.

Imports necessários para aplicação



Em seguida, vamos para o corpo da nossa classe principal.

Iremos declarar duas variáveis que farão a ligação com os elementos <EditText> e <TextView> que declaramos no arquivo “main.xml” chamados user_sequence e password_txt, respectivamente. Também vamos precisar de uma variável String chamada password_sequence que irá armazenar o valor real da sequência secreta de caracteres que serão sorteados randomicamente variando de 0 (zero) ao 9 como definimos no começo do post. Outra variável será a intitulada rounds que como o nome já diz irá contar o número de rodadas que o usuário precisará jogar para acertar a sequência.

Declaração das variáveis



Agora iremos dar um “pulo” no código. Para definir a sequência de caracteres secretos, por questão de limpeza do código e também facilidade, vamos criar uma função específica para criar nossa sequência secreta.

Para criar a sequência de senha, a ideia é extremamente simples. Vamos criar uma variável String para nos auxiliar. Nossa função irá retornar o valor armazenado por essa variável auxiliar. Dei o nome dela de pass_sequence. Vamos criar também uma variável para definir o tamanho da sequência, isso porque podemos mais tarde criar níveis de dificuldade que aumentarão o número de caracteres secretos. Por enquanto, deixaremos com o valor 4. Com um loop que vai do 0 (zero) ao tamanho da sequência, no nosso caso o valor é 4, vamos calcular um número randômico que vai de 0 (zero) ao 9 através da linha pass_sequence += Math.round(Math.random() * 10 ). Depois apenas retornamos o valor resultante de pass_sequence.

Função createPasswordSequence()




Agora que criamos nossa função para criar a sequência de caracteres secretos, vamos voltar ao código principal onde iremos atribuir o valor de retorno da função mencionada na variável password_sequence. Lembra quando falei que teríamos que arrumar um jeito de “mascarar” nossa senha? Pois é, não sei se é a melhor maneira, mas foi a que me veio na cabeça no momento que estava programando. Criei uma variável auxiliar do tipo String que possui o mesmo tamanho de password_sequence com uma diferença: a variável aux terá apenas como valor o símbolo “*”. E como faremos para verificar se a sequência do usuário é igual ao do programa? Pois é, nós poderemos compará-la diretamente com password_sequence pois esta variável não será mostrada ao usuário, consequentemente ele não terá como manipulá-la.


Inicialização da sequência de caracteres



Pronto. Já temos nossa sequência de caracteres. Para facilitar o entendimento do usuário, vamos mostrar a variável aux precedida de uma informação. Em seguida, vamos linkar nosso botão criado no main.xml com um botão no código-fonte.


Linkando <TextView> e <Button>



Chegamos no momento de tratar a interação do usuário com nosso game. O usuário irá digitar uma sequência e apertar o botão para verificar se a senha está correta, certo? Então precisamos criar um listener para o botão e é o que faremos agora. Contudo, não basta apenas adicionar um listener ao botão. Precisamos verificar se o que o usuário digitou é igual ao que foi criado pelo aplicativo. Então vamos “pular” mais uma vez até nossa função de verificação que também criamos.

Explicá-la não será uma tarefa simples. Como vimos, além de verificarmos se está correta a sequência ou não, também precisamos enviar ao usuário uma resposta com os códigos que listamos na tela da aplicação. Para realizarmos a verificação, vamos ter que criar um loop duplo com condicionais.

Para começar, vamos pelo mais fácil. O caso de o dígito existir e estar na posição correta. Fazemos essa verificação através da primeira condicional. Caso o dígito exista e está na posição correta, o segundo loop não será executado otimizando dessa maneira a performance da nossa aplicação. Agora no caso do dígito não estar na ordem correta (observe que ainda não sabemos se o dígito simplesmente não existe naquela sequência ou se ele existe mas está em outra posição) precisamos rodar o loop interno.

Se vocês repararem bem, criei uma variável booleana para definir se o dígito existe ou não. Pode parecer sem sentido, mas a ideia ficará mais clara quando avançarmos um pouco mais no código. Entramos no loop e verificamos um a um se algum dígito da variável password_sequence corresponde a algum dígito da cadeia digitada pelo usuário. Caso exista o dígito igual, iremos setar como verdadeiro a variável has_item e quebraremos o loop. Agora imagine que chegamos ao fim do loop e não encontramos nenhum dígito que fosse igual entre as duas sequências. O que o programa fará? Ele entrará na condição na qual has_item continua com o valor falso. Então teremos nossa função de verificação funcionando perfeitamente e de maneira otimizada.


Função verifyPasswordErrorSequence() responsável em retornar uma cadeia de caracteres com os códigos 'char' para instruir o jogador dos erros e acertos



Voltamos para nosso método onCreate(...) para criar a ação do botão. Ela será basicamente a mesma do último post, contudo, no caso da entrada do usuário for igual a senha sorteada, uma mensagem de vitória será lançada e o jogo recomeçará com nova senha secreta. No caso das senhas não baterem, a sequência de caracteres com os códigos respectivos da posição e existência de cada caractere será exibido.

Caso do usuário ter acertado a sequência


Caso do usuário ter errado a sequência



Bom, agora é só executar e se divertir quebrando a cabeça para acertar as sequências de senhas. Espero que este post torne-se útil para vocês.

Caso alguém tenha joguinhos para sugerir, basta enviar e-mail para mim (andreikeda87@gmail.com). Obrigado pelas visitas e sintam-se a vontade para comentar e também seguir o blog.


Um grande abraço e até a próxima quando iremos fazer mais um joguinho utilizando apenas <EditText> e <Button>

terça-feira, 30 de agosto de 2011

Trabalhando com EditText e Button [ATUALIZADO]


Olá leitores do blog,

Como mencionei no post anterior, hoje nós iremos avançar um pouco mais na complexidade da app adicionando elementos como botão e campos para entrada do usuário.

Vamos começar criando um novo projeto. Vou chamá-lo de Post003Project. Depois selecionaremos a checkbox referente ao Android 2.3.3. Em seguida chamaremos nossa app de Post003App e nossa main Activity de Post003Activity como mostram as duas figuras abaixo:

Nome do Projeto


Escolha da versão do SDK, nome da app e nome da main Activity, respectivamente


Ok. Depois de criar o projeto, teremos a aplicação padrão exibindo o nome da app no emulador do Android. Vocês ainda lembram do arquivo xml que mencionei no post passado? Pois é, usaremos ele nessa app, por isso vamos navegar até a pasta “res/layout” e abrir o arquivo “main.xml”. Ele deve estar mais ou menos como na figura abaixo:
!OBSERVAÇÃO! Não consegui utilizar o framework para trabalhar com o “main.xml” diretamente através de uma interface similar ao Swing. Por isso, a imagem que postei será igual a quando você clicar na aba “main.xml” ao lado da “Graphical Layout”.

Arquivo main.xml


Legal, não? Antes de começar a escrever no xml, vamos explicar um pouco sobre o que já está definido no arquivo e que pertença ao nosso escopo de programação para Android, por isso, caso você não conheça xml, então é melhor antes procurar saber e estudar como estruturar um xml. Mas voltando ao assunto. Nesse xml encontramos uma classe que nos é nova. Ela se chama LinearLayout. Ela já estava na nossa aplicação, mas como não abrimos o arquivo “main.xml” do nosso HelloWorld então não pudemos 'ver' a classe. Contudo, mesmo sem vê-la, ela estava lá.


Já o TextView utilizamos para mostrar ao usuário nossa mensagem de boas vindas. Se vocês prestarem bem atenção, o texto do TextView está setado com o valor “@string/hello”, mas se você rodar a aplicação, não verá nada similar a isso na tela de exibição. E por quê? A resposta é simples. O valor é nada mais, nada menos do que uma constante definida no arquivo “string.xml” que está localizado na pasta “values” dentro de “res”. Se você abrir o arquivo “string.xml”, verá o verdadeiro valor a que a constante se refere.

Vamos começar a 'criar' nosso layout.

Primeiro, vamos criar mais uma tag TextView abaixo da primeira tag TextView para que possamos informar ao usuário o que esperamos que ele faça. Vamos atribuir os mesmos valores que a tag anterior alterando apenas o texto. No meu caso, defini-lo como “Escreva qualquer coisa ao lado:”. O xml irá ficar semelhante a este:

Arquivo xml com novo TextView


Feito isso, vamos ver como está nossa aplicação. Abra o .java da sua aplicação e aperto o botão “Run” na barra de ferramentas. Escolha para executar como Android Project e espere o emulador iniciar. Quando a aplicação for executada, vocês verão algo semelhante a imagem abaixo:

Aplicação executando ainda sem campo de entrada e botão


Agora vamos voltar ao nosso arquivo “main.xml”. Está na hora de adicionarmos um campo para o usuário entrar com alguma informação. Vamos supor que nossa app gosta de cumprimentar os usuários, então nada melhor do que saber o nome do usuário. Vamos alterar nosso texto da última TextView para “Qual seu nome?”. Texto alterado? Se você quiser rodar a app para ver a alteração, tudo bem, mas vou pular esse passo.

Está na hora de adicionarmos o campo de entrada. Abaixo do final da tag TextView, iremos adicionar a tag <EditText>. Um atributo muito importante nessa tag é o 'id' porque com ele que referenciamos este campo especifico dentro do código da classe Activity principal. Repare bem na linha que definimos o 'id' do nosso texto: android:id=“@+id/name_text”. O que estamos dizendo nessa linha para o compilador da app é que esse objeto da classe EditText deve ser referenciado por name_text .Abaixo segue a imagem de como ficará o novo “main.xml”.

main.xml agora com a tag <EditText> adicionada


Outro atributo “novo” é o android:hint. Usamos ele para dar dicas da utilidade do determinado campo.

Agora que já temos nosso campo para entrada do usuário, vamos rodar mais uma vez a app.
Você irá notar que abaixo do texto “Qual seu nome?” surgiu um novo objeto. Este objeto é justamente nosso campo de entrada definido através da tag <EditText>. Ao interagir com o campo de entrada você provavelmente vai notar que nada além da sua ação de escrever acontece. Tendo percebido esse problema, fica muito claro que precisamos de mais elementos para tornar nossa app no mínimo funcional. Veja na imagem abaixo:

App com campo para entrada de usuário



Minimize o emulador e vamos voltar ao “main.xml”. Se você notou, nós estamos voltando muitas vezes a esse arquivo, então é óbvio a importância dele na nossa aplicação. Por isso, tente mantê-lo sempre limpo e bem formatado. Afinal, código limpo e estruturado torna o entendimento mais simples e muitas vezes até evitando erros bobos.

Já que temos nosso campo de entrada do usuário, agora precisamos dar um jeito de manipular essa informação através de alguma interação. Qual delas? Provavelmente a mais simples é com botão e é com ele que vamos trabalhar agora.
Abaixo da tag <EditText> vamos adicionar a tag <Button> similar ao <EditText> com exceção do atributo android:hint que vamos dispensar. No atributo android:text vamos colocar o texto “OK” para que o usuário tenha alguma noção do que seja aquele elemento. Finalmente terminamos nosso trabalho com o arquivo “main.xml” que ficará mais ou menos assim.

Nossa app com layout completo



Note que mesmo com o botão, nosso programa continua sem interatividade. Agora está na hora de mudarmos um pouco de linguagem. Vamos sair do XML e partir para o Java. Para isso, abra o arquivo .java da main Activity.

A ideia aqui será a seguinte:
  • Precisamos criar uma maneira de recuperar o valor digitado pelo usuário no campo de entrada quando ele clicar no botão “OK”.
  • De acordo com esse valor, vamos dar as boas vindas através de uma instância da classe AlertDialog.

Não vou detalhar o código linha por linha, pois a maioria é puramente o Java comum. Contudo, alguns comandos merecem certo destaque.

Código-fonte



Vocês lembram de uma classe gerada automaticamente pela IDE que servia como uma interface entre o XML e o Java que mencionei no primeiro post? Pois é, a utilidade dela está no nosso código exatamente quando chamamos a função findViewById(R.id.xxx). Esta função busca dentro do arquivo “main.xml” o elemento com o atributo 'id' semelhante ao digitado no parâmentro 'R.id.xxx' onde 'xxx' é o nome que demos ao elemento no “main.xml”. Vamos navegar para o “main.xml” e buscar o valor que demos para o botão da nossa app: “@+id/ok_btn”, certo? Então substituímos o 'xxx' por 'ok_btn' e declaramos um objeto filha da classe Button dentro do Java instanciando com as definições que definimos dentro do “main.xml”. Muito prático, não? Também achei.

Ainda há também o AlertDialog que criamos, mas não irei me estender em explicações sobre suas funcionalidades, mas para quem quiser saber mais recomendo navegar pelos fóruns de Android e principalmente na documentação da linguagem. Recomendo também estudar os atributos do layout, pois é com eles que deixamos nossa app mais elegante.

Espero que todos tenham apreciado o post e tenham aprendido mais um pouco. Para finalizar o print da app executando depois que inserimos o nome e apertamos no botão “OK”.

App 'finalizado' rodando


Um grande abraço e boa semana.

Esqueci de avisar que no próximo post irei colocar um pequeno jogo estilo senha. Para quem não conhece, é um jogo onde o jogador deve adivinhar uma sequência de números sorteados aleatoriamente.

domingo, 28 de agosto de 2011

Primeira app: Hello World!

Boa noite a todos,

Como falei no primeiro post do blog, neste irei exemplificar a implementação de um Hello World no Android. Eu sei que é algo extremamente simples, mas para começar, nada como algo simples. Antes, no entanto, irei falar um pouco da IDE que estou utilizando que é o MotoDev Studio da Motorola. Costumo programar em Java utilizando o eclipse e também é possível programar para Android utilizando o eclipse com a condição de importar algumas bibliotecas e plugins que não entendi direito como fazia. Então para não estragar meu eclipse, preferi baixar outra IDE e experimentar. Felizmente, as apps feitas no MotoDev Studio podem ser utilizados em qualquer aparelho que possua Android (no início pensei que apenas poderia utilizar as apps num Motorola) e os plugins e bibliotecas necessárias para programar utilizando SDK já vem acopladas a IDE.

Como pode-se ver na imagem acima, a interface do MotoDev é quase idêntica ao do eclipse, o que de início torna mais fácil a familiarização com a ferramenta.


Interface MotoDev Studio


Para começarmos um novo projeto, basta fazer como no eclipse. Em Novo Projeto (New Project), escolha a opção Projeto Android utilizando Studio para Android (Android Project Using Studio for Android) e a tela de configuração vai abrir.


Janela para criação de novo projeto

Digite o nome do projeto e escolha a versão da API que deseja utilizar. Mais embaixo será necessário definir o nome da aplicação, o pacote, o nome da Activity e a versão mínima do SDK. É importante observar que a versão mínima do SDK deve estar de acordo com a escolhida no checkbox acima. Quando você clicar para o projeto ser criado, você poderá ver que a própria IDE já criou uma classe com o nome que você especificou e que essa classe estende uma classe chamada Activity. Em posts adiante, falarei um pouco mais sobre essa classe. Se você navegar na pasta chamada 'res' → 'layout', um arquivo xml intitulado main.xml responsável em trabalhar o layout da aplicação através das tags de xml, mas também só iremos detalhá-lo um pouco melhor em posts adiante. Se você navegar na pasta 'gen' e for através do pacote determinado na criação do projeto, você encontrará um arquivo chamado R.java. Esse arquivo funciona semelhante a uma interface entre o código Java e o XML citado anteriormente e não pode ser alterado manualmente. Ainda há também o arquivo 'AndroidManifest.xml' que guarda as informações referentes a nossa aplicação.

Então navegue até a pasta onde está o código-fonte da classe que você criou. Ela vai estar em 'src'. Abra o .java referente a sua classe e um código-fonte semelhante a esse será exibido.


Código-fonte da classe principal


Algumas explicações simples já que de início consideramos que você já tenha um certo conhecimento em Java.

Pode-se ver o pacote da classe e o import das bibliotecas necessárias para execução da app. Para melhores detalhes sobre cada classe, olhar a documentação da linguagem. Em seguida, temos nossa classe. No meu caso, chamei-a de 'MainActivity' e esta classe estende a classe Activity. Em seguida temos um @override de um método chamado 'onCreate(arg argument)'. O método onCreate() é um dos métodos definidos pela classe Activity. Ainda há onPause(), onStart(), entre outros. Há um gráfico bem interessante no tutorial de Felipe Silveira explicando os métodos da classe Activity. Para acessar, só clicar aqui.

Vamos fazer um teste e rodar o programa com a configuração inicial. Clique em “Run” e execute como uma aplicação Android.

Detalhe para essa parte que o emulador levará um tempo para iniciar. Aparecerá Android escrito na tela e depois de alguns minutos o “celular” estará pronto para uso. Desbloqueie-o arrastando o botão verde com o cadeado até o ponto marcado. Você verá que sua aplicação será iniciada. Uma tela preta exibindo o nome da sua aplicação estará no canto superior esquerdo da tela. Agora vamos voltar ao código-fonte.

!CUIDADO! Não feche o emulador. Apenas minimize-o senão você terá que esperar ele reiniciar novamente cada vez que abri-lo e isso não é legal. Acreditem, fechei-o várias vezes antes de entender que ele demorava para iniciar e que depois de iniciado bastava em recompilar o código-fonte que o emulador o executava novamente.

Está na hora de fazermos nossa primeira app e vocês verão como é simples. Para isso, vamos adicionar um import ao pacote “android.widget.TextView”. Em seguida vamos para o método onCreate(Bundle savedInstaceState). Abaixo da linha “super.onCreate(savedInstanceState)”, vamos adicionar um objeto da classe TextView através da linha “TextView view = new TextView(this)”. Na linha seguinte, deve estar “setContentView(R.layout.main), correto? Teremos que alterar essa linha porque queremos que a app exiba uma mensagem que iremos definir ao invés de exibir o nome da aplicação. Então vamos fazer o seguinte, ao invés de “setContentView(R.layout.main)”, vamos colocar “setContentView(view)”, onde o parâmetro definido pela variável view é justamente o objeto que criamos na linha superior. Contudo, se executarmos o programa, nenhuma mensagem aparecerá e por quê? Bom, se você olhar o código-fonte com certeza descobrirá. Nós criamos um objeto da classe TextView e fizemos para a aplicação 'mostrá-lo'. No entanto, não definimos nenhum valor para esse objeto, por isso antes do “setContentView(view)” iremos adicionar a linha “view.setText('Hello World!')”. O código-fonte deve ficar semelhante a imagem abaixo.


Código-fonte HelloWorld!

Então agora só nos falta testar a app e ver se ela está funcionando corretamente. Execute-a e abra o emulador. A mensagem definida por você estará lá no mesmo lugar que antes aparecia o nome da aplicação como mostra a imagem abaixo.


Emulador com nossa primeira app

Legal, não? Para nós programadores pode até ser quando estamos começando numa linguagem, contudo para os usuários nada disso é legal. Eles esperam sempre muito mais. Por isso, no próximo post, trabalharemos com entrada do usuário assim como botão e tela de aviso. Após o próximo post vou tentar colocar dois códigos-fonte de dois joguinhos simples utilizando apenas entrada de usuário, botão e tela de aviso, afinal o blog trata de jogos para Android =P. Lembrando que as informações que eu passo aqui não são tudo de autoria minha. Minhas referências estão sendo tutoriais que encontro pela internet e depois de testar coloco aqui meu entendimento em relação ao assunto descrito. Gostaria de aproveitar e agradecer aos programadores que não se limitam a apenas saber e sim a disseminar o conhecimento para que outros também possam usufruir dele. Por isso, um abraço para Felipe Silveira e Luciano Alves pelos tutoriais que estou utilizando nesse meu começo com Android.

Para os leitores também um grande abraço e até o próximo post.