segunda-feira, 19 de setembro de 2011

PageScroll

Olá povo,

Certo dia, assisti uma apresentação de Silvio Meira em que ele falou que nós, como desenvolvedores, tínhamos sempre que olhar para uma aplicação e pensar: "como esses caras [desenvolvedores] fizeram isso?". Às vezes, utilizamos a aplicação sem notarmos coisas simples que poderíamos incorporar aos nossos próprios aplicativos (cuidado com as patentes :p).

Pois bem. Eu achei interessante na aplicação do TweetDeck, a forma com que ele alternava entre a Timeline e as Mentions, apenas rolando da tela na horizontal. Similar ao que é feito na home screen do próprio Android para alternar entre os "desktops".

Achava que o Android já tivesse um componente para fazer isso, mas não achei. Tentei fazer com um Gallery, mas o resultado não ficou legal. Finalmente, achei um componente chamado HorizontalPager, disponível em http://code.google.com/p/deezapps-widgets/. Distribuído sobre licença Apache, ele realiza o comportamento que eu queria e pode ser incorporado ao seu projeto sem culpa :)

Disponibilizei um projeto que utiliza "esse carinha" neste link. E Abaixo temos um screenshot do mesmo.



EDITADO
Depois de publicar esse post, recebi a dica de @acvilarim que existe uma outra forma de obter esse mesmo comportamento com a API do próprio Android: utilizando as classes ViewPager e PagerAdapter. Entretanto essas classes estão em uma biblioteca separada que provê compatibilidade da versão 1.6 em diante com o Honeycomb (3.x). Para instalá-la, você pode seguir esse tutorial aqui.
Meu colega Marcelo Alves me indicou esse artigo para começar a mexer com o ViewPager e o PagerAdapter. De qualquer forma, postei aqui um exemplo que fiz idêntico ao anterior, mas usando essa API.

4br4ç05,
nglauber

7 comentários:

Thainã Monteiro disse...

Me bati para entender o funcionamento e até agora não consegui, sabe nos dizer como acrescentar novos layouts?


Grato!

Nelson Glauber disse...

Oi Thainã,

Você baixou o código de exemplo? Se você observar no res/main.xml vai observar que eu estou incluindo 3 layouts





Se quisesse, poderia incluir outros. Ou ainda, se quiser fazer isso dinamicamente, basta pegar a referência do HorizontalPager e adicionar Views filhas ao mesmo.

4br4ç05,
nglauber

@acvilarim disse...

Nelson,

Muito legal o exemplo!

tem outra forma de se fazer o mesmo efeito, agora, utilizando o conceito de Fragments, que veio com o HoneyComb3.0 e já em uma api de compactibilidade para versões não tablet a partir da 1.6

http://developer.android.com/guide/topics/fundamentals/fragments.html

Aqui pode ler um pouco mais...

No API Demos tem um exemplo igualzinho ao que você gostaria... eles deram uma ajudinha pra não ficar tão complexo.

Abraço

Nelson Glauber disse...

Valeu Augusto!

Editei o post com sua dica!

4br4ç05,
nglauber

Leonardo Melo Santos disse...

Glauber, era exatamente esse componente que estava querendo implementar. Lembra que perguntei a você pessoalmente com poderia fazer isto e você tinha me falado que não existe um componente nativo. Sabendo agora que com Galley isso não rolaria, vou partir para sua solução ou usar o ViewPager. Essa transição de Views é vista em alguns aplicativos e tem um valor agregado interessante. Parabéns por mais uma postagem que contribui com a comunidade Androidiana. Abraço!

Unknown disse...

Oi glauber...

Vi que esse poste é de 2011...
queria saber se hj, com as atualizações do android que aconteceram desde esse post, esse ainda é a melhor forma?, lembro que na sua aula vc comentou sobre um componente desse mas não disse o nome.

Nelson Glauber disse...

Oi Desconhecido,

Você pode usar o ViewPager conforme está na parte editada do post.

4br4ç05,
nglauber