APP Thiengo [Calopsita] 3.0

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /APP Thiengo [Calopsita] 3.0

APP Thiengo [Calopsita] 3.0

Vinícius Thiengo
(3007) (49)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa, blz?

Nesse vídeo apresento a nova versão da APP do Blog fazendo alguns comentários do que adicionei e do que removi da versão anterior. A principal mudança foi a utilização consciente do "configChanges", pois devido a ele não cobrir todas as possibilidades de reconstrução de activities (provocando a perda das referencias atuais dos objetos caso o OnSaveInstanceState() não tenha sido utilizado) optei por utilizar sempre (mesmo quando utilizei também o configChanges) o OnSaveInstanceState() e implementei em todas as classe do dominio do problema da APP a interface Parcelable que é a mais eficiente na transformação de objetos em bytes e vice-versa.

O Design está quase todo respeitando as guidelines do Material Design Android, ainda falta deixar a Toolbar mais animada e as sugestões de busca na forma padronizada indicada guidelines (e outras coisas menos notáveis). Outra mudança importante foi a troca de ListView por RecyclerView (muito mais eficiente que a antiga) e em duas áreas utilizo junto ao RecyclerView o CardView, todos com a lib de support. Fique atento na lógica da utilização das activities e fragments, fiz o caminho que percebi sendo utilizado no APP do Google Play Store. Então é isso, provavelmente o vídeo está muito mais claro de entender.

Obs. : O servidor ainda não foi alterado, logo a lentidão, caso tenha, não tem a ver com a APP e sim com o server que será atualizado o quanto antes.

Abaixo segue os links das libs que apresentei as páginas no vídeo:

Página da lib FloatingActionButton

Página da lib RoundedImageView

Página da lib Picasso

Post que fiz sobre a lib Crouton

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Notificação Interna Com a Lib Crouton no AndroidNotificação Interna Com a Lib Crouton no AndroidAndroid
Obtendo Localização Com Location API no Android - Parte 1Obtendo Localização Com Location API no Android - Parte 1Android
JobScheduler API no Android, Entendendo e UtilizandoJobScheduler API no Android, Entendendo e UtilizandoAndroid
Tracking Com Location API, JobScheduler e Google Maps V2 no Android - Parte 4Tracking Com Location API, JobScheduler e Google Maps V2 no Android - Parte 4Android

Compartilhar

Comentários Facebook

Comentários Blog (49)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
17/01/2017
Blz Thiengo.
O Thi coloca na próxima atualização do seu app, o compartilhamento do Go-ahead. Seria bem interesante, pois as frases que você coloca ali são bem impactantes. E coloca também uma intent scheme pra quem tiver o app ao clicar aqui no link do app no site startar o app, se quiser tenho o esquema da intent.
Sucesso e parabéns mais uma X.vlw
Responder
Vinícius Thiengo (1) (0)
17/01/2017
Allan, obrigado pelas dicas.

Vou sim aplicar uma série de atualizações, incluindo a do Go-ahead. Somente tenho de terminar algumas demandas antes. Forte abraço.
Responder
15/01/2017
Ola Thiengo.
Como tirar o peso dos items no ListView.
Aqui quando carrego os items [ imagens e string ] no listView, ao rolar a lista fica dando uns légs estranhos.
Tem como resolver isso?
Obrigado e parabéns.
Responder
Vinícius Thiengo (1) (0)
15/01/2017
Allan, tudo bem?

Primeiro, trabalhe com o padrão ViewHolder. Se me lembro bem, no artigo / vídeo do link a seguir falo sobre ele: http://www.thiengo.com.br/listview-entendendo-e-utilizando-no-android

O ViewHolder vai reaproveitar layouts e evitar que seu adaptar crie um novo a todo momento.

Depois, não esqueça de otimizar as imagens que serão carregadas, tanto no tamanho em dimensões quanto no tamanho em bytes.

Utilize uma library para carregamento das imagens. Eu utilizo frequentemente o Picasso: http://square.github.io/picasso/

A parte das imagens é a mais critica, pois algumas vezes muito trabalho tem que ser feito no backend de sua APP, backend Web, para que tenham mais de uma imagem da mesma imagem enviada.

Isso para que o APP carregue a de melhor performance a ele.

Depois dessas atualizações a APP deve parar com os delays, ao menos na área do ListView.

Lembrando que quando se tratando de performance em lista, o RecyclerView é sempre uma melhor opção que o ListView:

http://www.thiengo.com.br/recyclerview-material-design-android-parte-2

Abraço.
Responder
16/01/2017
Blz Thiengo.
Provavelmente é as imagens que estão efetuando os delays, mais vou tentar implementar o RecycleView.
Poderia ser uma solução, usar o tinypng.com para compactar as imagens ? Se não, recomenda algum serviço?
Obrigado
Responder
Vinícius Thiengo (1) (0)
16/01/2017
Allan, o tinypng pode ser uma solução, mas se estiver com o código de manipulação de imagem no backend para cada usuário, terá de ver como acessar a API deles em seu backend.

Eu utilizo a library intervention (http://image.intervention.io/ ) no meu backend PHP para tratar a imagem e até criar outras com ela.

Mas nada é automático, tenho de invocar os métodos corretos, com os parâmetros corretos... mas funciona.

No packagist.org tem muitas outras, isso se seu backend for PHP.

Abraço.
Responder
Danilo (2) (0)
03/07/2015
Bom Dia Thiengo, como em outras vezes, venho pedir uma ajuda a vc. Eu implementei o recyclerview.onscrollListener por meio de uma classe abstrata chamada EndlessScrollListener, já ouviu falar? O problema é que eu só consegui fazer o primeiro carregamento no scroll, depois ele não carrega mais. Você tem alguma dica que possa me ajudar? Só falta isso pra eu terminar o app daqui do trabalho e já tô batendo cabeça uns dias... Valeu Thiengo!
Responder
Vinícius Thiengo (1) (0)
03/07/2015
Fala Danilo, blz?
Está ao menos conseguindo entrar no listener? Pois pode ser que a lógica utilizada é que não esteja deixando o carregamento acontecer. Não sei se já viu, mas nesse vídeo (http://www.thiengo.com.br/recyclerview-material-design-android-parte-2 ) implemento um scrollListener no RecyclerView, se não viu ainda, dê uma olhada. Abraço
Responder
danilod2.sousa (1) (0)
02/07/2015
Thiengo, boa noite. Nesse seu app, VC utiliza o scrolllistener com a mesma implementação da sua vídeo aula e a mesma implementacao lado do servidor  php também?
Responder
Vinícius Thiengo (1) (0)
03/07/2015
Fala Danilo, blz?
O ScrollView sim, no PHP muda pouca coisa, mais no script que acessa a base de dados mesmo. Abraço
Responder
Vinícius Thiengo (1) (0)
03/07/2015
* scrolllistener
Responder
Danilo (2) (0)
06/06/2015
Bom dia Thiengo, será se seria possível criar uma trigger em uma tabela do banco, para que depois de cada inserção, ele envie uma notificação para o gcm? Ou deve haver um back end em php para intermediar? Obrigado pela ajuda!
Responder
Vinícius Thiengo (1) (0)
06/06/2015
Fala Danilo, blz?
Como respondido anteriormente, com o trigger vc terá de descobri como acessar a linguagem de backend para ele chamar os scripts de comunicação com o GCM. Abraço
Responder
Danilo (2) (0)
06/06/2015
Vc criou alguma interface front end para enviar as notificação em php para o GCM? No seu exemplo, vc cria uma mensagem em tempo de execução, se não estou enganado. Agora em relação a stored procedures, eu entendi a lógica, mas vc implementaria toda aquela validação no banco de quantos registros faltam enviar para o app, quando este prrcisar carregar mais?
Responder
Vinícius Thiengo (1) (0)
07/06/2015
Na verdade o Blog é a próprio Frontend, quando crio um post, por exemplo, o script no lado servidor identifica se aquele é um novo post e se sim ele obtém todos os ids registrados e começa a enviar as mensagens para esses ids, isso em blocos de 1000, pois é o máximo que o GCM suporte a cada chamada.

Quanto a StoredeProcedure, na verdade eu já pegaria todos os registros dela e passaria para o PHP trabalha-los em um loop, ou seja, chamaria a stored apenas um vez. Abraço
Responder
danilod2.sousa (2) (0)
04/06/2015
boa noite Thiengo. No seu APP, VC utiliza as mesmas classes para implementar o carregamento de mais dados no recycler view que foram utilizadas na aula de scroll listener? no caso VC verifica no servidor se ainda tem mais registros no banco e informa ao APP? VC utiliza pdo no lado do server? abraço e obrigado desde já
Responder
Vinícius Thiengo (1) (0)
05/06/2015
Fala Danilo, blz?
A questão de carregamento de mais dados eu utilizo a mesma lógica e o RecyclerView, mas há outras classes do projeto mesmo envolvidas. No server não utilizo PDO, mas estou na beira para passar td para StoredProcedures, pois descobri que é mais eficiente. Abraço
Responder
Danilo (2) (0)
05/06/2015
Então , não sabia dessa dica com stored procedures. No meu caso, o banco possui mais de 10 registros, então preciso implementar essa lógica. Vc tem algum tutorial ou algum site que explica a implementação do server com stored procedures? Abs e mt obrigado
Responder
Danilo (2) (0)
05/06/2015
Não sei se seria viável, mas seguindo essa mesma linha de implementar procedimento dentro do próprio sgbd, a criação de trigger para disparar um push notification para o app a medida em que um registro específico é inserido na base, funcionaria?
Responder
Vinícius Thiengo (1) (0)
06/06/2015
No caso da trigger, acredito que não funcionaria, pois ela roda apenas no banco de dados, mesmo que vc desse um jeito de conseguir com a trigger acessar o código da linguagem de backend para chamar os scripts do GCM, isso poderia ser muito mais custoso do que apenas chamar o script assim que uma determinada tabela recebesse conteúdo novo, por exemplo. Quanto ao StoredProdecure e server web, vc terá de utilizar tutos diferentes, pois são independentes. Segue um sobre StoredProcedures: http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5--net-17843

Para servidor não precisa quebrar a cabeça, instale um que já vem com todas as tecnologias necessárias (http://www.wampserver.com/en/ ). Abraço
Responder
29/04/2015
Fala Thiengo, blz?
Estava vacilando aqui...rsrs
Era que o construtor da minha Fragment estava privado....rrsrs

Obrigado, abraços!
Responder
28/04/2015
Como que você fez a funcionalidade de voltar estando no modo de paisagem?

Exemplo: Acessei o app na orientação vertical, depois acessei outro post na horizontal e quando clicar em voltar fazer isso com sucesso.

Tentei implementar aqui e não consegui, se puder me ajudar...

Obrigado, parabéns pela app!
Responder
Vinícius Thiengo (2) (0)
29/04/2015
Fala PH, blz?
Na verdade não fiz nada, não na ação "voltar", porém todas as classe do dominio do problema de minha APP (User, Post, Comment, ...) implementam a interface Parcelable e todos os objetos das classe do dominio do problema de minha APP, quando dentro de Activities e fragments elas são enviadas no onSaveInstanceState() sempre que há reconstrução da tela, por exemplo, passando de horizontal para vertical e até mesmo chamando outra Activity.

Em seu LogCat qual é o erro sendo printado? Abraço
Responder
olivcamp (3) (0)
31/03/2015
Muito bom!!! Parabéns!
Usou alguma lib para persistência de dados?
Responder
Vinícius Thiengo (1) (0)
31/03/2015
Fala Olivcamp, blz?
Utilizei apenas o SQLite mesmo. Vlw, Abraço
Responder
gilmar rodrigues (4) (0)
30/03/2015
Ficou show o APP! Parabéns!
Responder
Leandrox364 (2) (0)
29/03/2015
Parabéns o app esta show, voce fara algum. video explicando como funciona a integracao com o servidor ex: de onde vem os dados dos posts e carrega as listas? alguma co8sa desse tipo se e dados ou paginas html.
Responder
Vinícius Thiengo (1) (0)
30/03/2015
Fala Leandro, blz?
Na verdade tenho vídeos separados que fiz que são basicamente as tecnologias que utilizo: Volley (http://www.thiengo.com.br/volley-no-android-entendendo-e-utilizando ), Carregamento de listas do Servidor (http://www.thiengo.com.br/carregando-dados-no-listview-com-onscrolllistener-e-volley-no-android ) e JSON (http://www.thiengo.com.br/parser-json-no-android-entendendo-e-utilizando ). Somente o carregamento de listas do servidor que tem uma entidade que não a utilizo mais, no caso é o ListView, agora trabalho com RecyclerView que é mais eficiente, mas esse vou fazer um vídeo ainda, agora que comecei o Material Design, logo chego nele. Abraço.
Responder
Vinícius Thiengo (1) (0)
30/03/2015
Quase esqueci, não utilizo WebView, é tudo nativo. Abraço
Responder
27/03/2015
App muito bom Thiengo! Me surgiram algumas curiosidades quando vi seu app.

Venho desenvolvendo um app para a empresa no qual sou sócio, e estou querendo aplicar o Material Design implementando a ToolBar no lugar da ActionBar, bem como o mesmo efeito que vc colocou no ícone da Toolbar (efeito que acontece no ícone quando abre e fecha a NavigationDrawer). Também gostaria muito de saber como faz pra trocar a cor da status bar, vi que vc alterou a cor nativa (cor preta). Ficou muito bom. Vc pretende realizar algum tutorial com esses aspectos que citei ? Andei pesquisando na Internet e não encontrei muito conteúdo referente à isso, e como vi que seu app tem esses recursos e ainda com compatibilidade, por isso estou lhe perguntando.

Obrigado desde já Thiengo,

Vinicius.
Responder
Vinícius Thiengo (1) (0)
27/03/2015
Fala Vinícius, blz?
O toolbar é fora de série mesmo. Provavelmente na próxima vídeo aula já começo com os vídeos sobre Material Design (começando pelo toolbar), mas tem um outro canal no YouTube, que não sei se conhece, mas é fascinante para developers Android, é o slidenerd ( https://www.youtube.com/watch?v=h57QpXp2TRg&list=PLonJJ3BVjZW6CtAMbJz1XD8ELUs1KXaTD&index=1 ), os vídeos são em inglês, porém é possível acompanha-los sem problema. Veja a série do link que lhe passei que já vai sair com a Toolbar customizada e com support. Abraço
Responder
joaobremgartner (2) (0)
28/03/2015
Thiengo , qual seria a principal diferença em trabalhar com o toolbar ao invés do actionbar?
Responder
Vinícius Thiengo (1) (0)
29/03/2015
Fala João, blz?
A principal diferença que vejo é customização, mas temos de levar em conta que por ser uma entidade que resolve o mesmo problema da ActionBar e ser tb mais nova no Android ela tende a ser mais eficiente em termos de renderização na tela, por exemplo... e se não me engano a ActionBar está depreciada, tem que verificar isso melhor. Abraço
Responder
29/03/2015
Shoow ! Obrigado Thiengo,

Vim acompanhando a série de videos do slidenerd, porém assim como o Lucas que postou nos comentários daqui, também tive dificuldade em implementar a statusbar nas versões v19 e v21 com o atributo android:windowTranslucentStatus = true. Não consegui, mesmo seguindo os passos do vídeo.
Responder
jhosef (3) (0)
25/03/2015
Otimo app!!! Mostrando que nem toda casa de ferreiro tem    espeto é de pau... kkkkkkkkk
Responder
robsonp1000 (3) (0)
23/03/2015
O app ficou muito bom.
Responder
Vinícius Thiengo (1) (0)
23/03/2015
Vlw Robson, abraço
Responder
guihgo100milha (2) (0)
23/03/2015
app show! !!
comentando pelo app.
Parabéns  e mais sucesso! !!
Responder
Vinícius Thiengo (0) (0)
23/03/2015
Vlw Guihgo. Abraço
Responder
22/03/2015
Fala Thiengo! Como tu fez pra mudar a cor da StatusBar do android e funcionar inclusive no Kitkat?
Responder
Vinícius Thiengo (1) (0)
23/03/2015
Fala Lucas, blz?
Vc deve fazer uma jogada com os arquivos de style, na verdade criar um geral, outro somente para a versão Kitkat e outro somente para o Lollipop, é tranquilo, porém um pouco grande, logo vou lhe passar a fonte de onde peguei. Slidenerd (https://www.youtube.com/watch?v=h57QpXp2TRg&list=PLonJJ3BVjZW6CtAMbJz1XD8ELUs1KXaTD&index=1 ), nessa série é apresentada a maneira de como fazer isso, na parte do NavigationDrawer, mas recomendo assistir a todos os vídeos dessa série, vai dar um baita improve em seus conhecimentos sobre Material Design no Android. Está em inglês, mas é possível acompanhar o código sem problemas. Abraço
Responder
23/03/2015
Opa, já tinha tentado pelo jeito do Slidenerd mas mesmo assim não funciona nem na API 19 nem na 21.
Tenho o styles.xml geral com style Base e style da App que herda do Base, nele tem:
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
no styles-v21 tem:
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="android:windowTranslucentStatus">true</item>
no styles-v19 tem:
        <item name="android:windowTranslucentStatus">true</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
e o tema que o AppTheme.base herda é o Theme.AppCompat.Light.NoActionBar. Mas não encontro erro algum. Tu tem alguma solução?
Responder
Vinícius Thiengo (1) (0)
24/03/2015
Opa Lucas, vacilo meu.
Na verdade, além do style tem os arquivos dimens tb (dimens.xml, v19/dimens.xml, v21/dimens.xml). Primeiro dentro dos styles .xml das versões 19 e 21 vc deve adicionar a seguinte linha:

<item name="android:windowTranslucentStatus">true</item>

Depois dentro dos dimens eu utilizei o seguinte item:

/dimens.xml
<dimen name="app_bar_top_padding">0dp</dimen>

v19/dimens.xml e v21/dimens.xml
<dimen name="app_bar_top_padding">24dp</dimen>

A status bar tem 24dp de height, logo depois da configuração windowTranslucentStatus a toolbar fica debaixo do statusBar, logo é necessário colocar esse app_bar_top_padding como sendo o paddingTop do toolbar. Dessa maneira vai sem problemas. Lembrando que será a cor da toolbar que estará debaixo do statusbar, porém por ele ter uma cor grey transparent a cor da toolbar fica mais escura que a parte que não está debaixo da statusBar. Depois diga se deu. Abraço
Responder
agsalles (1) (0)
22/03/2015
Ficou muito show a App. Parabéns.
Responder
Vinícius Thiengo (0) (0)
23/03/2015
Vlw Agsalles, abraço
Responder
daviola.menezes (2) (0)
22/03/2015
Show o App ficou lindo. PARABÉNS
Responder
Vinícius Thiengo (0) (0)
23/03/2015
Vlw Davi, abraço
Responder
alessandrobarreto50 (1) (0)
22/03/2015
Muito bom, gostei da nova App! e aguardo uns vídeos seus para deixar quem acompanha você atualizado com o Material Design do Google.
Responder
Vinícius Thiengo (3) (0)
23/03/2015
Fala Alessandro, blz?
Os vídeos do Material Design e de outras novas entidades como RecyclerView e CardView vão começar, provavelmente na próxima semana... hj ainda finalizo o do Location API no Android. Abraço
Responder