Estou usando o Android ViewPager
. O que eu quero fazer é mostrar uma prévia da página à esquerda e à direita. Eu vi onde posso usar um negativo pageMargin
para mostrar uma prévia do lado direito.
setPageMargin(-100);
Existe alguma maneira de mostrar uma visualização do lado esquerdo também? É basicamente algo semelhante ao widget da galeria que estou procurando.
android
android-viewpager
Brian Boyle
fonte
fonte
setPageMargin(-100)
trabalho está correto?Respostas:
Para mostrar a visualização das páginas esquerda e direita, defina os dois valores a seguir
viewpager.setClipToPadding(false);
viewpager.setPadding(left,0,right,0);
Se precisar de espaço entre duas páginas no viewpager, adicione
fonte
A resposta de @JijuInduchoodan é perfeita e está funcionando. No entanto, como sou relativamente novo no Android, demorei um pouco para entendê-lo e configurá-lo corretamente. Então, estou postando esta resposta para referência futura e ajudar qualquer pessoa que esteja no mesmo lugar que eu.
Não há necessidade de definir qualquer largura para a
ViewPager's
página no adaptador. Nenhum código adicional é necessário para ver a página anterior e a próxima emViewPager
. No entanto, se você deseja adicionar um espaço em branco na parte superior e inferior de cada página, pode definir o seguinte código paraViewPager's
o layout pai da página filha.Esta será a aparência final do ViewPager.
fonte
Solução com o novo ViewPager2
Hoje em dia você deve considerar o uso de ViewPager2, que "substitui ViewPager, abordando a maioria dos pontos problemáticos de seu antecessor" :
O resultado
O código
Em sua atividade / fragmento, configure o ViewPager2:
Adicione o
HorizontalMarginItemDecoration
, que é trivialItemDecoration
:Adicione as dimensões que controlam quanto do item anterior / próximo é visível e a margem horizontal do item atual:
Por fim, adicione o
ViewPager2
ao seu layout:Uma coisa importante: um
ViewPager2
item deve terlayout_height="match_parent"
(caso contrário, ele gera uma IllegalStateException), então você deve fazer algo como:Exemplos de PageTransformer
O Google adicionou um guia sobre ViewPager2 que tem 2
PageTransformer
implementações que você pode usar como inspiração: https://developer.android.com/training/animation/screen-slide-2Sobre o novo ViewPager2
fonte
viewpager.setPageTransformer { page, position -> page.translationX = -1 * position }
setOffscreenPageLimit(1)
:)Em 2017 esse tipo de comportamento também pode ser facilmente conseguido usando
RecyclerView
com PagerSnapHelper (adicionado na versão 25.1.0 da biblioteca de suporte v7): Algum tempo atrás, eu precisava desse recurso semelhante a um visualizador e preparei uma pequena biblioteca:
MetalRecyclerPagerView - você pode encontrar todo o código junto com exemplos lá.
Principalmente, consiste de um único arquivo de classe: MetalRecyclerViewPager.java (e dois xmls: attrs.xml e ids.xml ).
Espero que ajude alguém e economize algumas horas :)
fonte
new PagerSnapHelper().attachToRecyclerView(recyclerView)
e tenho o ajuste de página.se alguém ainda está procurando por solução, eu havia customizado a ViewPage para alcançá-la sem usar margem negativa, encontre um exemplo de projeto aqui https://github.com/44kksharma/Android-ViewPager-Carousel-UI ele deve funcionar na maioria dos casos, mas você ainda pode definir a margem da página com
mPager.setPageMargin(margin in pixel);
fonte
Você pode fazer isso em um arquivo xml, basta usar o código abaixo:
fonte
Para aqueles que lutam para ter isso em telas diferentes,
fonte
Observe que ao definir nenhum preenchimento de zero para um viewpager, o posicionamento do edgeeffect do viewpager é bagunçado, este é um bug do viewpager, veja aqui: bug do viewpager edgeeffect
Você pode desativar o efeito de borda configurando
android:overScrollMode="never"
para o viewpager ou pode corrigir o bug com uma versão ligeiramente modificada da classe EdgeEffect: ViewPagerEdgeEffect fixfonte
Use este adaptador de fragmento e classe para visualizar o viewpager na esquerda e direita scroll.add classes necessárias para rolar para visualizar as próximas páginas.
fonte