Como o Facebook cria os Chat Heads no Android? Qual é a API para criar as visualizações flutuantes sobre todas as outras visualizações?
android
facebook
android-windowmanager
Daniel A. White
fonte
fonte
Respostas:
Este aqui :
// EDIT: O código completo aqui :
Não se esqueça de iniciar o serviço de alguma forma:
.. E adicione este serviço ao seu manifesto.
fonte
Como regra, as atividades do Android são de tela cheia, UIs conceitualmente dedicadas que levam toda a interação. Existem algumas exceções para isso. Para começar, existem caixas de diálogo pop-up que não preenchem a tela. Outro é o brinde do Android, que é um pop-up não interativo - você não pode tocá-lo e, se tentar, irá para o que estiver por baixo.
Você também pode criar suas próprias interfaces de usuário especiais. Você pode adicionar visualizações diretamente ao
WindowManager
, especificando um sinalizador de tipo. O Chat Heads provavelmente usa TYPE_PHONE . Existem alguns tipos semelhantes, mas o objetivo é o mesmo: sobreposições de propósito especial que podem aparecer por cima de qualquer outra coisa sem que o aplicativo pai aparentemente esteja presente.Isso só leva você até agora, por causa de problemas com a interação. No início, sua sobreposição absorverá toda a interação, para que a cabeça não apenas receba eventos, mas também bloqueie a interação com tudo que está por baixo.
Você configura esse comportamento usando o LayoutParams .
FLAG_NOT_TOUCH_MODAL
significa que os eventos fora da sua área de exibição vão para as UIs subjacentes. Agora você verá que funciona, mas outras coisas ruins ainda acontecem, como os botões voltar / menu não são direcionados para aplicativos, além de nenhum teclado. Para resolver o que você precisaFLAG_NOT_FOCUSABLE
.Você também obtém um efeito colateral do bit não focalizável, que não é mais uma boa interação com a sobreposição, por exemplo, pressionamentos de botão. No entanto, você pode obter alguns eventos básicos de toque, nos quais sempre é possível fazer matemática, e isso provavelmente é suficiente para os Chat Heads. Esteja ciente de que isso deixa você sozinho em muitas áreas, como animação da interface do usuário.
Uma boa visão geral dos detalhes, inclusive permitindo o consumo seletivo de interação, pode ser encontrada neste encadeamento StackOverflow . Em particular, um dos links de resposta o levará até aqui , que é um bom exemplo de projeto. Observe que o ICS mudou como isso funciona um pouco, mas os threads explicam isso.
Isso é tudo sobre API pública, mas não parece realmente algo comum que devíamos estar fazendo normalmente. A documentação está repleta de referências a comportamentos especiais de aplicativos do sistema e por boas razões; e se todo mundo fizesse isso?
fonte
As cabeças elásticas proporcionam um comportamento baseado nas molas das cabeças de bate-papo fora da caixa. Tudo o que você precisa definir é o desenho para o cabeçalho do bate-papo e o fragmento para abrir assim que o cabeçalho for clicado. As cabeças do bate-papo são recolhidas quando minimizadas e seguem o dedo quando arrastadas.
O projeto inclui um aplicativo de demonstração que demonstra todas as funcionalidades incorporadas. Para usá-lo, você precisa adicioná-lo às dependências do gradle.
fonte