Slide de estilo do Android para Facebook


283

O novo aplicativo do Facebook e sua navegação são muito legais. Eu estava apenas tentando ver como ele pode ser emulado no meu aplicativo.

Alguém tem uma idéia de como isso pode ser alcançado?

insira a descrição da imagem aqui

Ao clicar no botão superior esquerdo, a página desliza e a seguinte tela é exibida:

insira a descrição da imagem aqui

Vídeo do youtube


2
Sim, um vídeo também será útil para conhecer o efeito exato.
Bool.dev

@ bool.dev, aqui está o vídeo: youtube.com/watch?v=ANLMaL7zn20
Harsha MV

@HarshaMV: - Tente procurar este tópico.Eu acho que pode ajudá-lo um pouco. stackoverflow.com/questions/8453320/…
Shashank_Itmaster

3
Artigo muito bom sobre navegação deslizante no Android - androiduipatterns.com/2012/06/… . Deve ler.
AlexKorovyansky

Eu tenho implementado o meu próprio menu deslizante, veja aqui stackoverflow.com/a/15880375/1939564
Muhammad Babar

Respostas:


176

Eu já brinquei com isso, e a melhor maneira de encontrar foi usar um FrameLayout e colocar um HorizontalScrollView (HSV) personalizado na parte superior do menu. Dentro do HSV estão as visualizações do aplicativo, mas há uma visualização transparente como o primeiro filho. Isso significa que, quando o HSV tiver deslocamento de rolagem zero, o menu será exibido (e ainda será clicável surpreendentemente).

Quando o aplicativo é iniciado, rolamos o HSV para o deslocamento da primeira visualização visível do aplicativo e, quando queremos mostrar o menu, rolamos para trás para revelar o menu através da visualização transparente.

O código está aqui e os dois botões inferiores (chamados HorzScrollWithListMenu e HorzScrollWithImageMenu) na atividade Iniciar mostram os melhores menus que eu poderia criar:

Demonstração do menu deslizante do Android

Captura de tela do emulador (rolagem intermediária):

Captura de tela do emulador (rolagem intermediária)

Captura de tela do dispositivo (rolagem completa). Observe que meu ícone não é tão largo quanto o ícone do menu do Facebook; portanto, a visualização do menu e a visualização 'app' não estão alinhadas.

Captura de tela do dispositivo (rolagem completa)


1
@AmokraneChentir Você pode usar atividades diferentes chamando getDrawingCache()suas atividades que não são do menu e criando um ImageView a partir do bitmap. Em seguida, chamar startActivity(intent)e overridePendingTransition(0, 0)no onClickmétodo da ClickListenerForScrollingclasse para mostrar imediatamente a nova atividade e obter o efeito desejado.
Siklab.ph

1
Gostaria de saber se o HorizontalScrollView personalizado pode ser usado com o ListView, já que o documento oficial do HorizontalScrollView mencionou que forçará o ListView a exibir seus itens inteiros.
shiami

1
este garfo muda as atividades sem usar fragmentos!
Erik B

1
Obrigado pela ajuda, consegui usar o HorzScrollWithListMenu.java.
KarenAnne

2
Muito obrigado @PaulGrime ... este é um ótimo exemplo simples e o mais impressionante é nesta demonstração simples, fácil de entender e personalizar, e não há projeto de biblioteca para usar.
Naveen Kumar

37

Implementei a navegação de slides do tipo facebook neste projeto de biblioteca .

Você pode facilmente incorporá-lo ao seu aplicativo, interface do usuário e navegação. Você precisará implementar apenas uma Atividade e um Fragmento, informar a biblioteca sobre ela - e a biblioteca fornecerá todas as animações e navegação desejadas.

Dentro do repositório, você pode encontrar um projeto demo, com como usar a lib para implementar uma navegação semelhante ao facebook. Aqui está um pequeno vídeo com registro do projeto de demonstração .

Além disso, essa lib deve ser compatível com o padrão ActionBar, porque se baseia nas transações de atividades e TranslateAnimations (não nas transações de fragmentos e nas visualizações personalizadas).

No momento, o maior problema é fazê-lo funcionar bem no aplicativo, compatível com os modos retrato e paisagem. Se você tiver algum comentário, forneça-o via github.

Tudo de bom,
Alex


4
Olá, Acabei de descobrir que sua abordagem criará um bitmap de captura de tela grande toda vez que você abrir a barra lateral. Aumentará o tamanho da pilha e poderá causar erro de falta de memória.
shiami

3
Obrigado querido korovyansk, é muito bom. mas o layout absoluto foi descontinuado em novos sistemas operacionais. Você pode codificá-lo novamente?
Hesam

Obrigado a todos que dão feedback no github ou aqui. Conheço alguns bugs e tenho idéias de como melhorar o aplicativo. Eu faço, quando terei tempo livre.
AlexKorovyansky

Oi koroyansk. Estou usando sua biblioteca e funciona bem. Mas eu tenho um pequeno problema. Quando a lista da barra de slides é aberta, estou iniciando a atividade no clique no item de exibição de lista. O início da atividade está correto, mas a animação do slide não funciona. Código((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
Sunny

no seu caso, a nova atividade será aberta imediatamente sem aguardar o término da animação. Você pode tentar estender a biblioteca e adicionar retorno de chamada para o final da animação. pode ser que eu adicionarei esse recurso à próxima versão da biblioteca.
AlexKorovyansky

24

Aqui está outra lib e parece ser o melhor na minha opinião. Eu não escrevi ..

ATUALIZAR:

Esse código parece funcionar melhor para mim e move toda a Actionbar de maneira semelhante ao aplicativo G +.

Como o Google conseguiu fazer isso? Deslize o ActionBar no aplicativo Android


7
Eu escrevi esta biblioteca, feliz que você goste. É realmente básico por enquanto, mas estarei melhorando nas próximas semanas. Mais do que bem-vindo para outras pessoas fazerem alterações também.
David Scott

Esta biblioteca é absolutamente maravilhosa. É tão simples de usar e funciona perfeitamente. Obrigado. Gostaria apenas de acrescentar que a amostra funciona apenas com o ICS (e o Honeycomb, eu acho) .. mas a biblioteca funciona todo o caminho de volta ao 2.1, estou usando sem problemas.
Steven Elliott

Nada mal, é bem simples, mas funciona bem e a configuração é realmente rápida. No entanto, não é muito configurável de fora da biblioteca: todos os itens têm o mesmo layout simples e, em movimento, não há possibilidade de listagem dinâmica; as duas coisas seriam fáceis de adaptar, mas eu realmente preciso agrupar dentro da lista e isso não será tão fácil.
Htafoya #

22

Eu acho que o aplicativo do facebook não está escrito em código nativo (por código nativo, quero dizer, usando layouts no Android), mas eles usaram o webview para ele e usaram algumas bibliotecas de interface do usuário javascript, como o sencha . Pode ser facilmente alcançado usando a estrutura sencha.

insira a descrição da imagem aqui


16
+1 A interface do usuário pode ser alterada sem a Atualização de aplicativos, por isso é definitivamente um aplicativo Web e o Android é basicamente um navegador.
perfil

7
Não tenho certeza se esse é necessariamente o caso. O esqueleto da interface do usuário pode ser nativo (por exemplo, o menu atual View e outras Views nativas) e o conteúdo dessas Views carregado dinamicamente. Se o esqueleto do aplicativo mudar, provavelmente será necessária uma atualização.
Paul Grime

2
Não acho que o aplicativo do facebook seja um aplicativo da web. Muito fluente, rápido. Conheço aplicativos web / híbridos que parecem bons "como nativos", mas ainda há um pouco de atraso em relação aos nativos. Não apenas o esqueleto - as listas, o mapa etc. parecem e parecem nativos. Pelo menos com o estado atual da tecnologia.
Ixx

Ok, alguém me disse que esse aplicativo não era assim há cerca de 2 meses - então você está se referindo a uma versão antiga que eu não conheço. De qualquer forma, pode ser informativo comentar que o aplicativo atual é definitivamente nativo.
Ixx

20

Aqui está mais uma biblioteca de código aberto (muito boa)!

A boa característica deste é que ele é facilmente integrado ao ActionBarSherlock.

Aqui está o link do projeto github

Aqui está o link de download do Google Play


2
Acho que este é o melhor
Harsha MV

17

Acabei de implementar uma visão semelhante para o meu próprio projeto. Você pode conferir aqui

Aqui está a tela do aplicativo de amostra com base na biblioteca que escrevi: Exemplo de ActionsContentView

É fácil usar essa visualização personalizada como elemento do layout XML. Aqui está um exemplo:

    <shared.ui.actionscontentview.ActionsContentView
      android:id="@+id/content"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:actions_layout="@layout/actions"
      app:content_layout="@layout/content" />

Se você tiver alguma dúvida sobre o uso da biblioteca ActionsContentView, posso escrever um pequeno artigo nos projetos Wiki.

Algumas vantagens desta biblioteca:

  • capacidade de deslizar a visualização por toque
  • é fácil ajustar o tamanho da barra de ações em XML
  • suporte para todas as versões do Android SDK a partir de 2.0 ou superior

Há uma limitação:

  • todas as vistas de rolagem horizontal não funcionarão nos limites dessa vista

Atenciosamente, Steven


como definir a primeira interface do usuário é como sua foto de upload? eu testá-lo primeiro UI é webView na tela. Espero que o listview seja exibido quando o aplicativo for iniciado. através do seu lib é de 2,0, mas sua demo é 4.0, eu espero que você também pode usar 2.0.that é legal
Pengwang

@ pengwang: Acabei de enviar algum código para suportar esse recurso. Você pode fazer isso enquanto Activity.onResume () chamando viewActionsContentView.showActions ();
Rude

É possível desativar os eventos de toque na parte oculta? Por exemplo, quando a parte direita está ativa, todas as visualizações à direita são desativadas.
Valeriy

Existe a possibilidade de bloquear o layout do conteúdo enquanto a ação 1 é mostrada. Enviei a você um projeto de amostra por e-mail.
Rude

16

Com a revisão 13 do pacote de suporte do Android (maio de 2013), existe o DrawerLayout para criar uma Gaveta de Navegação que pode ser puxada da borda de uma janela. E, a gaveta de navegação é um padrão de design agora.

biblioteca de suporte v4

padrão de design de gaveta de navegação


2
Sim, o nível API mínimo suportado é 4.
Wubao Li

1
E a biblioteca de compatibilidade permite usá-lo em dispositivos mais antigos. Acabei de desenvolver um para Gingerbread e mais tarde.
Tony Maro

2
Isso precisa estar mais no topo. Muitas bibliotecas estranhas de terceiros nas outras respostas.
achou

15

Fez um resumo de uma implementação existente e a transformou em um projeto de biblioteca mais um aplicativo de exemplo. Também foi adicionada a análise XML, bem como a detecção automática de uma barra de ação possivelmente presente, para que funcione com o nativo e também com uma barra de ação de suporte, como ActionBarSherlock.

Este também desliza a barra de ação!

A coisa toda é um projeto de biblioteca junto com um aplicativo de exemplo e é descrito em Um menu deslizante para Android, como aplicativos do Google e do Facebook . Agradecimentos a scirocco pela idéia e código iniciais!

SlideMenu no pão de mel SlideMenu no ICS com ActionBar


10

Isso é simples e elegante: https://github.com/akotoe/android-slide-out-menu.git

Instantâneo:

insira a descrição da imagem aqui


pode me ajudar?? Pergunta relacionada ao slider .. Aqui está o link stackoverflow.com/questions/14500927/…
moDev

permite deslizar tocando? (swipe médio)
alicanbatur 27/03

@ Edward Eu tenho trabalhado com sua amostra, acho ótimo e fácil de usar, mas vi um problema ao girar a tela (estou usando o android: configChanges = "orientação" no manifesto com o android 3.1 porque não deseja que a atividade seja reiniciada) a tela gira muito bem, mas o layout do quadro mantém seu tamanho e não parece bom, você tem uma maneira de contornar isso? Eu tentei de tudo, mas não consigo corrigi-lo. graças
zvzej

@ Edward aqui está a minha pergunta usando sua amostra, por favor me ajude ou me dê alguns conselhos, obrigado. stackoverflow.com/questions/16778911/…
zvzej


8

Ainda não posso comentar a resposta dada por @Paul Grime. De qualquer forma, enviei no seu projeto do github a correção para o problema de flicker ....

Vou postar a correção aqui, talvez alguém precise. Você só precisa adicionar duas linhas de código. O primeiro abaixo da chamada anim.setAnimationListener:

anim.setFillAfter(true);

E o segundo após a chamada app.layout ():

app.clearAnimation();

Espero que isto ajude :)


6

Eu implementei isso com o AbsoluteLayout e um simples controlador de slide que move a exibição para um deslocamento negativo para ocultar.

Se alguém estiver interessado, eu posso limpar o código / layout e postar. Sei que o AbsoluteLayout está obsoleto, mas foi uma implementação muito direta. Vista esquerda / Vista direita e, quando "deslizar para abrir", mova a vista esquerda de um deslocamento -X para a largura do dispositivo - o que você deseja exibir na Vista direita


Agradecerei se você puder fazê-lo sem o AbsoluteLayout! Obrigado!
Igor

4

Olá, este é o melhor aplicativo de demonstração de amostra que fornece o menu de slides do Facebook. Verifique o código aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui


3

Como parte da minha ACL (Biblioteca Comum Android), implementei o próprio SideBar. Vantagens principais:

  1. A barra lateral pode ser definida em qualquer posição: esquerda, superior, inferior, direita
  2. Tanto a vista principal quanto a deslizante são clicáveis
  3. A barra lateral pode ser parcialmente mostrada
  4. Atributos estilizados do SideBar facilitam a mudança de estilo
  5. Artefato no repositório maven
  6. Parte de uma grande biblioteca

Código fonte: https://github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar

Uso: https://github.com/serso/android-common/blob/master/samples/res/layout/acl_view_layout.xml


3

Recentemente, trabalhei na minha versão de implementação do menu deslizante. Ele usa a popular biblioteca Android J.Feinstein SlidingMenu.

Por favor, verifique o código fonte no GitHub:

https://github.com/baruckis/Android-SlidingMenuImplementation

Faça o download do aplicativo diretamente no dispositivo e tente:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

O código deve ser auto-explicativo por causa dos comentários. Espero que seja útil! ;)


3

Eu encontrei uma maneira mais simples para isso e seu trabalho. Use a gaveta de Navegação simples e chame drawer.setdrawerListner () e use o método mainView.setX () no método drawerSlide abaixo ou copie meu código.

arquivo xml

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >

<RelativeLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

  <ImageView
      android:layout_width="40dp"
      android:layout_height="40dp"
      android:id="@+id/menu"
      android:layout_alignParentTop="true"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="10dp"
      android:layout_marginLeft="10dp"
      android:src="@drawable/black_line"
      />
</RelativeLayout>


<RelativeLayout
    android:id="@+id/left_drawer"
    android:layout_width="200dp"
    android:background="#181D21"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    >
    </RelativeLayout>
 </android.support.v4.widget.DrawerLayout>

arquivo java

   public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    menu=(ImageView)findViewById(R.id.menu);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mainView=(RelativeLayout)findViewById(R.id.content_frame);

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            drawerLayout.openDrawer(Gravity.LEFT);
        }
    });

    drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            mainView.setX(slideOffset * 300);
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
 }
}

insira a descrição da imagem aqui

Obrigado


2

Vou fazer algumas suposições ousadas aqui ...

Suponho que eles tenham um layout que represente o menu que não está visível. Quando o botão do menu é tocado, eles animam o layout / visualização na parte superior para sair do caminho e simplesmente ativam a visibilidade do layout do menu. Eu não pensei nisso causando qualquer tipo de problemas com o índice z nas visualizações, ou como eles controlam isso.


se você usou o aplicativo ... você pode ver que o layout desliza para a direita, dando lugar à seção do menu. vou tentar fazer um vídeo e enviá-lo.
Harsha MV

1
Eu uso a versão do iPhone, se a versão do Android é a mesma, então duvido que seja muito diferente do que descrevi. Como não escrevi muitas animações no Android, não pude dizer como é o código da animação, mas, em poucas palavras, presumo que seja o que descrevi.
Jlindenbaum

obrigado, youtube.com/watch?v=ANLMaL7zn20 é o mesmo efeito no iPhone.
Harsha MV


2

Aqui está o guia de design e desenvolvimento encontrado na documentação oficial do Android, sem a necessidade de adicionar uma biblioteca externa não oficial. Somente a biblioteca de suporte do Android fará. Encontre os links aqui.

projetar e desenvolver .


1

O aplicativo do Facebook para Android pode ser construído com fragmentos . O menu é um fragmento, a Atividade em profundidade (Feed de notícias / Eventos / Amigos etc.) é o outro fragmento. Basicamente, um layout de 'mestre e detalhes' de um tablet em um telefone.


Nesse caso, precisamos criar a barra de ação dentro do fragmento, para que não possamos usar nenhum recurso do framework Android para construí-lo, certo? Na verdade, não tenho certeza sobre o facebook, mas para muitos desenvolvedores é uma maneira muito difícil de criar a actionbar sem a ajuda do framework, espero que esse tempo já tenha terminado.
AlexKorovyansky

1

Para informações, como a biblioteca de compatibilidade começa na 1.6 e esse aplicativo do Facebook também está sendo executado em dispositivos com Android 1.5, isso não pôde ser feito com os fragmentos.

A maneira de fazer isso é: Crie uma atividade "base" BaseMenuActivity, onde você coloca toda a lógica do onItemClickListener para sua lista de menus e define a animação 2 ("abrir" e "fechar"). No final / início das animações, você mostra / oculta o layout da BaseMenuActivity (vamos chamá-lo menu_layout). O layout para esta atividade é simples, é apenas uma lista com itens + uma parte transparente à direita da sua lista. Esta parte poderá ser clicada e sua largura será a mesma do seu "botão mover". Com isso, você poderá clicar nesse layout para iniciar a animação e deixar o layout do conteúdo deslizar para a esquerda e exibir a tela inteira. Para cada opção (ou seja, item da lista de menus), você cria uma "ContentActivity" que estende a BaseMenuActivity. Então, quando você clica em um item da lista, inicia sua ItemSelectedContentActivity com o menu visível (que será fechado assim que sua atividade for iniciada). Os layouts para cada ContentActivity são FrameLayout e incluem o e. Você só precisa mover o content_layout e tornar o menu_layout visível quando quiser.

Essa é uma maneira de fazer isso, e espero ter sido claro o suficiente.


1

Eu tenho brincado com isso nos últimos dias e encontrei uma solução bastante simples no final e que funciona antes do Honeycomb. Minha solução foi animar a tela que eu quero deslizar ( FrameLayoutpara mim) e ouvir o final da animação (nesse ponto, para compensar a posição esquerda / direita da tela). Colei minha solução aqui: Como animar a tradução de um View



1

Eu não vi o incrível SimonVT / android-menudrawer mencionado em qualquer lugar nas respostas acima. Então aqui está um link

https://github.com/SimonVT/android-menudrawer

É super fácil de usar e você pode colocá-lo à esquerda, direita, superior ou inferior. Muito bem documentado com código de amostra e licença Apache 2.0.


0

Em junho de 2012, o Google adicionou "modelos" no plug-in do Eclipse ADT e existe um modelo chamado "fluxo mestre / detalhes" que faz exatamente isso (com base em fragmentos)


1
O fluxo mestre / detalhes não é um menu da barra lateral em questão. São apenas dois fragmentos exibidos juntos (tablet) ou separadamente (telefone).
tomash

Bem, em junho de 2013, o Layout da gaveta de navegação foi adicionado, o que é mais semelhante ao necessário aqui, mas o ActionBar não desliza com a gaveta, pois a barra deslizante do estilo do Facebook precisa aqui.
Khulja Sim Sim
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.