Existe uma maneira de fazer um ViewPager
que não role horizontalmente, mas verticalmente ?!
android
android-viewpager
user1709805
fonte
fonte
Respostas:
Você pode usar um ViewPager.PageTransformer para dar a ilusão de uma vertical
ViewPager
. Para conseguir rolagem com um arrasto vertical em vez de horizontal, você terá que substituirViewPager
os eventos de toque padrão e trocar as coordenadas deMotionEvent
s antes de manipulá-los, por exemplo:Claro que você pode ajustar essas configurações como achar melhor. Termina assim:
fonte
Vertical ViewPager
As outras respostas aqui pareciam ter alguns problemas com elas. Mesmo os projetos de código aberto recomendados não estavam mesclando solicitações de recebimento recentes com correções de bugs. Então eu achei um
VerticalViewPager
do Google que eles usavam algum aplicativo DeskClock. Confio em usar a implementação do Google muito mais do que as outras respostas que circulam por aqui. (A versão do Google é semelhante à atual resposta mais votada, mas mais completa.)Exemplo completo
Este exemplo é quase exatamente o mesmo que meu exemplo básico do ViewPager , com algumas pequenas alterações para fazer uso da
VerticalViewPager
classe.XML
Adicione os layouts de xml para a atividade principal e para cada página (fragmento). Observe que usamos
VerticalViewPager
mais do que o padrãoViewPager
. Vou incluir o código para isso abaixo.activity_main.xml
fragment_one.xml
Código
O código para o
VerticalViewPager
não é meu. É apenas uma versão simplificada (sem comentários) do código-fonte do Google. Confira esse para a versão mais atualizada. Os comentários também são úteis para entender o que está acontecendo.VerticalViewPager.java
MainActivity.java
Eu apenas troquei
VerticalViewPager
porViewPager
.Acabado
Você deve conseguir executar o aplicativo e ver o resultado na animação acima.
Veja também
fonte
Eu tenho uma solução que funciona para mim em duas etapas.
onInstantiateItem()
dePagerAdapter
, crie a vista e gire-a em -90:Se você estiver usando
FragmentPagerAdapter
, então:Gire a
ViewPager
vista em 90 graus:Funciona como um encanto, pelo menos para a minha exigência.
fonte
Para alguém que está lutando com como fazer o ViewPager vertical funcionar na horizontal, faça o seguinte:
Vertical ViewPager
Horizontal ViewPager
fonte
Uma pequena extensão dessa resposta me ajudou a cumprir minha exigência (Vertical View Pager para animar similar como em Inshorts - Notícias em 60 palavras )
Espero que isso possa ser útil para outra pessoa.
fonte
Existem alguns projetos de código aberto que afirmam fazer isso. Aqui estão eles:
Estes foram marcados como obsoletos por seus autores:
E mais uma coisa:
deskclock
aplicativo, mas ele não parece ser oficialmente suportado, pois não consigo encontrar a documentação para ele.fonte
Confira: https://github.com/JakeWharton/Android-DirectionalViewPager
Ou a seguinte pergunta pode ajudá-lo: Vertical 'GridView with pages' ou 'Viewpager'
fonte
DirectionalViewPager
ele não foi atualizado por um bom tempo e, portanto, está faltando alguns dos recursos mais recentes daViewPager
biblioteca de suporte; iesetPageMargin(int)
. Geralmente, ele deve fazer o trabalho. E, se não, não é muito complicado pegar o código-fonteViewPager
e trocar toda a lógica x / y e largura / altura.DirectionalViewPager
mas, como MH disse, ele não é atualizado (o desenvolvedor o considera DEPRECADO) !! É incrível que os desenvolvedores do Android não tenham fornecido à comunidade uma verticalViewPager
, mas apenas a horizontal. Eu sou novo para o Android, desenvolver a minha vertical,ViewPager
trocando x / y não é tão fácil para mim .. eu prefiro uma solução já construída .. De qualquer forma, obrigadoApenas uma melhoria nas respostas de @Brett e @ Salman666 para transformar corretamente as coordenadas (X, Y) em (Y, X), pois as telas do dispositivo são retangulares:
...
...
No entanto, ainda é necessário fazer algo para melhorar a capacidade de resposta da tela sensível ao toque. O problema pode estar relacionado ao que @msdark comentou na resposta de @ Salman666.
fonte
true
emonInterceptTouchEvent
e eu também modificou as teclas, de modo que o uso de um DPAD ele aciona pergaminho com UP / DOWN em vez de esquerda / direita: gist.github.com/zevektor/fbacf4f4f6c39fd6e409fonte
Na verdade, já existe um na fonte do Android . Eu o modifiquei para funcionar melhor:
fonte
Um repositório atualmente mais ativo é o lsjwzh / RecyclerViewPager .
RecyclerView
fonte
Esta é uma implementação do ViewPager com rolagem vertical. Funciona bem com o RecyclerView e o ListView. guochong / VerticalViewPager .
use ViewPager.PageTransformer para fazer o ViewPager rolar verticalmente e também forneça um View.OnTouchListener para lidar com o conflito de rolagem.
fonte
Até eu estava enfrentando o mesmo problema ao tornar o ViewPager vertical trocando X e Y. Não foi nada fácil.
Isso porque costumava funcionar apenas quando o ângulo de passagem era menor que 7,125 graus = arctan (1/8) enquanto interceptava e 14 graus = arctan (1/4) enquanto tocava; como o ViewPager horizontal original, funciona quando o ângulo de passagem é inferior a 26,565 graus = arctan (1/2) enquanto intercepta e 45 graus = arctan (1) enquanto toca.
É por isso que copiei o código do Android support-core-ui e movi os valores para as variáveis, que multipliquei usando reflexão.
Encontre o código e o README em https://github.com/deepakmishra/verticalviewpager e VerticalViewPager em https://github.com/deepakmishra/verticalviewpager/blob/master/app/src/main/java/com/viewpager/VerticalViewPager .Java
fonte
a melhor maneira é girar o viewpager em 90 graus e usar constraintLayout para ajustar o local.
fonte
Acabei criando um novo DirectionalViewPager que pode rolar vertical ou horizontalmente porque todas as soluções que vi aqui têm falhas:
Implementações existentes do VerticalViewPager (por castorflex e LambergaR)
Truque de transformação com troca de coordenadas
VelocityTracker.computeCurrentVelocity
ainda calcula a velocidade com o eixo X, provavelmente porque isso usa internamente uma chamada nativa que ignora a troca de coordenadas.Ver rotação
fonte