android - ViewPager com limites de página anterior e seguinte




android-viewpager viewflipper viewanimator (7)

Eu tenho uma solução semelhante:

No viewpager, defina o preenchimento da esquerda e da direita, por exemplo, 20dp. Também defina a margem da página no viewpager, por exemplo, metade do preenchimento do pager. E não se esqueça de desativar o preenchimento do clipe.

tilePager.setPadding(defaultGap, 0, defaultGap, 0);
tilePager.setClipToPadding(false);
tilePager.setPageMargin(halfGap);

Estou criando uma visão com várias páginas. Eu quero que as bordas das páginas anterior e seguinte sejam exibidas como abaixo e implemente um toque com dois dedos para alternar entre as páginas.

Eu tentei usar ViewPager com margem de página negativa, como sugerido here mas que mostra apenas uma das bordas na tela, não ambos simultaneamente.

Alternativamente, existe alguma maneira que eu possa posicionar parte da minha visão fora da tela e, em seguida, animá-lo dando-lhe um efeito de tipo ViewPager .

Como devo fazer isso? Obrigado !


Citando-me de uma postagem de blog sobre este assunto :

A terceira abordagem vem de Dave Smith, co-autor do famoso livro Android Recipes. Ele seguiu em uma direção bem diferente, usando um contêiner personalizado que desativava o recorte de crianças para mostrar mais de uma página por vez.

Seu código de amostra publicado mostra a coisa toda em ação. Seu contêiner ( com.example.pagercontainer.PagerContainer ) envolve o ViewPager e chama setClipChildren(false); em si mesmo, portanto, embora o ViewPager esteja focado em uma página selecionada, outras páginas que possuem coordenadas além dos limites do ViewPager ainda estarão visíveis, desde que se ajustem ao PagerContainer . Ao dimensionar o ViewPager para ser menor que o PagerContainer , o ViewPager pode dimensionar suas páginas para esse tamanho, deixando espaço para outras páginas serem vistas. PagerContainer , no entanto, precisa ajudar um pouco com os eventos de toque, já que o ViewPager só irá manipular eventos de furto em seus próprios limites visíveis, ignorando quaisquer páginas visíveis para os lados.



  1. Defina o preenchimento esquerdo e direito para a visualização do item inteiro. Exemplo xml (page_item.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"/>
    
    <TextView
        android:id="@+id/text1"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </LinearLayout>
  2. Em seguida, defina margem de página negativa para PageView igual a 2 * (preenchimento de visualização anterior)

    int margin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20*2,     getResources().getDisplayMetrics());
    mViewPager.setPageMargin(-margin);
  3. Opcional. Defina zero preenchimento esquerdo para o primeiro item e zero preenchimento direito para o último item para ocultar as bordas vazias. Você pode fazer isso na classe de fragmento PageAdapter ou Page .


se alguém ainda procura solução, eu tinha customizado o ViewPage para conseguir isso sem usar margem negativa, ache 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);


Algum tempo atrás eu precisei desse recurso e preparei uma pequena biblioteca que usa o RecyclerView com o PagerSnapHelper (adicionado na versão 25.1.0 da biblioteca de suporte v7) em vez do ViewPager clássico:

MetalRecyclerPagerView - você pode encontrar todo o código junto com exemplos lá.

Principalmente consiste em um único arquivo de classe: MetalRecyclerViewPager.java (e dois xmls: ids.xml e ids.xml ).

Espero que ajude alguém :)


Adicione o seguinte código dentro do fragmento

@Override
public void setMenuVisibility(final boolean visible) 
 {
    super.setMenuVisibility(visible);
    if (visible && isResumed()) 
     {

     }
}




android android-viewpager viewflipper viewanimator