Sentindo-se tão preguiçoso quanto eu? Bem, todo o código acima é convertido em uma biblioteca!
Uso
Adicione o seguinte ao seu gradle:
implementation 'com.chabbal:slidingdotsplash:1.0.2'
Adicione o seguinte ao seu layout de Atividade ou Fragmento.
Eu já havia votado antes de fazer a pergunta, porque ela já me ajudou muito, mas agora eu gostaria de adicionar +2 ou +100 :) porque adicionar o onPageChangeListener funcionou perfeitamente para mim! E, para deixar claro para qualquer pessoa que possa usar isso, é necessário fazer as atualizações apenas no retorno de chamada onPageSelected, adicionar a atualização no retorno de chamada onPageScrolled torna confuso, inicia a atualização assim que você começa a rolar, o que não é visualmente bom!
Mohamed Hamdaoui
1
Por que precisamos de um TabLayout?
winklerrr
14
Você deseja usar com.google.android.material.tabs.TabLayoutem versões mais recentes
schlenger
2
Update: que obras, mas você deve usar novos componentes: androidx.viewpager.widget.ViewPager e com.google.android.material.tabs.TabLayout
dreinoso
2
O XML extraível acima parece estranho até eu mudar de forma para ring. Parece que o anel também é usado na biblioteca de slidedotsplash em vez de oval.
setOnPageChangedListener()descontinuada!! Use addOnPageChangedListener()agora.
Apurva
12
Essa não é realmente uma ótima solução, pois você precisa saber exatamente quantas páginas usará. Assim que você adiciona ou remove uma página, você está com problemas.
FrostRocket
3
Não lute contra a estrutura. O Android tem ferramentas para fazer isso como o TabLayout, não há motivo para reinventar a roda.
Criei uma biblioteca para atender à necessidade de um indicador de página no ViewPager. Minha biblioteca contém um modo de exibição chamado DotIndicator. Para usar minha biblioteca, adicionecompile 'com.matthew-tamlin:sliding-intro-screen:3.2.0' ao seu arquivo de compilação gradle.
A Visualização pode ser adicionada ao seu layout adicionando o seguinte:
O código acima replica perfeitamente a funcionalidade dos pontos na tela inicial do Google Launcher. No entanto, se você quiser personalizá-lo ainda mais, os seguintes atributos podem ser adicionados:
app:unselectedDotDiametere app:selectedDotDiameterpara definir os diâmetros dos pontos
app:unselectedDotColore app:selectedDotColorpara definir as cores dos pontos
app:spacingBetweenDots para mudar a distância entre os pontos
app:dotTransitionDuration para definir o tempo para animar a alteração de pequena para grande (e vice-versa)
Além disso, a exibição pode ser criada programaticamente usando:
DotIndicator indicator =newDotIndicator(context);
Existem métodos para modificar as propriedades, semelhantes aos atributos. Para atualizar o indicador para mostrar uma página diferente conforme selecionada, basta chamar o método indicator.setSelectedItem(int, true)de dentroViewPager.OnPageChangeListener.onPageSelected(int) .
Aqui está um exemplo disso em uso:
Se você estiver interessado, a biblioteca foi projetada para criar telas de introdução como a mostrada no gif acima.
Erro no indicador.setSelectedItem (position, true); IndexOutOfBoundsException
Dixit Panchal,
Qual versão? Pensei ter corrigido isso na versão 3.0.1, também quais eram os seus valores para indicator.size () e position?
Helios
Ótima biblioteca! No entanto, existe uma maneira mais elegante de atualizar selectedItem e numberOfItems ao mesmo tempo? Dependendo de qual é maior, a ordem muda, caso contrário, você lança uma exceção IndexOutOfBounds. Veja esta essência .
vsp 07/07
@vsp DotIndicator implementa a interface SelectionIndicator, o que significa que se houver dois métodos úteis que podem resolver seu problema: int getNumberOfItems()e void setNumberOfItems(). Em vez de capturar a exceção, você pode fazer algo como este gist.github.com/MatthewTamlin/761c7338d271af29526edc7859480aef .
Helios
Para quem não segue a conversa principal, na verdade havia um bug que foi corrigido. 3.0.2 é a versão mais recente a partir de agora.
Helios
18
ViewPagerIndicator não foi atualizado desde 2012 e recebeu vários erros que nunca foram corrigidos.
Finalmente encontrei uma alternativa com essa biblioteca de luzes que exibe bons pontos para o viewpager, aqui está o link:
Pensei em postar uma solução mais simples para o problema acima e os números dos indicadores podem ser alterados dinamicamente, com apenas uma alteração no valor da variável dotCounts=x.
1) Crie um arquivo xml na pasta drawable para o indicador selecionado da página chamado "item_selected".
Como posso adicionar pontos, não guias (como o iniciador do Nexus 5)?
Kfir Guy
@KfirGuy Eles são referidos como indicadores. Você pode fazer isso usando a biblioteca que mencionei acima. Além disso, você pode vê-lo em ação aqui - play.google.com/store/apps/…
Joel Fernandes
@JoelFernandes parece com o aplicativo não está disponível em todos os países
34m0
9
A seguir, minha solução proposta.
Como precisamos mostrar apenas algumas imagens nos pagers de exibição, evitamos o uso pesado de fragmentos.
Implementou os indicadores da página de visualização (os pontos inferiores sem nenhuma biblioteca ou plug-in extra)
Com o toque dos indicadores da página de visualização (os pontos), também a navegação da página está acontecendo.
Por favor, não esqueça de adicionar suas próprias imagens nos recursos.
eu usei isso, mas em viewpager pontos de rolagem não estão mudando
Aditya Vyas-Lakhan
1
Esta é a melhor resposta.
Sandeep Londhe
1
Se alguém quiser criar um viewPagercom miniaturas como indicadores, usar esta biblioteca pode ser uma opção:
ThumbIndicator for viewPager que também funciona com links de imagem como recursos.
Aqui está como eu fiz isso, um pouco semelhante às soluções acima. Apenas certifique-se de chamar o método loadDots () após o download de todas as imagens .
Respostas:
Não há necessidade de tanto código.
Você pode fazer tudo isso sem codificar muito usando apenas
viewpager
comtablayout
.Seu layout principal:
Conecte sua inatividade ou fragmento de elementos da interface do usuário da seguinte maneira:
Código Java:
É isso aí, você está pronto para ir.
Você precisará criar o seguinte arquivo de recurso xml na pasta drawable .
tab_indicator_selected.xml
tab_indicator_default.xml
tab_selector.xml
Sentindo-se tão preguiçoso quanto eu? Bem, todo o código acima é convertido em uma biblioteca! Uso Adicione o seguinte ao seu gradle:
implementation 'com.chabbal:slidingdotsplash:1.0.2'
Adicione o seguinte ao seu layout de Atividade ou Fragmento.Crie uma matriz inteira em,
strings.xml
por exemploFeito! Extra para ouvir alterações na página, use o link do
addOnPageChangeListener(listener);
Github .fonte
com.google.android.material.tabs.TabLayout
em versões mais recentesring
. Parece que o anel também é usado na biblioteca de slidedotsplash em vez de oval.Minha solução artesanal:
No layout:
E na atividade
fonte
Layout
apenas para colocar um ponto? Use emView
vez disso.fonte
setOnPageChangedListener()
descontinuada!! UseaddOnPageChangedListener()
agora.Criei uma biblioteca para atender à necessidade de um indicador de página no ViewPager. Minha biblioteca contém um modo de exibição chamado DotIndicator. Para usar minha biblioteca, adicione
compile 'com.matthew-tamlin:sliding-intro-screen:3.2.0'
ao seu arquivo de compilação gradle.A Visualização pode ser adicionada ao seu layout adicionando o seguinte:
O código acima replica perfeitamente a funcionalidade dos pontos na tela inicial do Google Launcher. No entanto, se você quiser personalizá-lo ainda mais, os seguintes atributos podem ser adicionados:
app:unselectedDotDiameter
eapp:selectedDotDiameter
para definir os diâmetros dos pontosapp:unselectedDotColor
eapp:selectedDotColor
para definir as cores dos pontosapp:spacingBetweenDots
para mudar a distância entre os pontosapp:dotTransitionDuration
para definir o tempo para animar a alteração de pequena para grande (e vice-versa)Além disso, a exibição pode ser criada programaticamente usando:
Existem métodos para modificar as propriedades, semelhantes aos atributos. Para atualizar o indicador para mostrar uma página diferente conforme selecionada, basta chamar o método
indicator.setSelectedItem(int, true)
de dentroViewPager.OnPageChangeListener.onPageSelected(int)
.Aqui está um exemplo disso em uso:
Se você estiver interessado, a biblioteca foi projetada para criar telas de introdução como a mostrada no gif acima.
Fonte do Github disponível aqui: https://github.com/MatthewTamlin/SlidingIntroScreen
fonte
int getNumberOfItems()
evoid setNumberOfItems()
. Em vez de capturar a exceção, você pode fazer algo como este gist.github.com/MatthewTamlin/761c7338d271af29526edc7859480aef .ViewPagerIndicator
não foi atualizado desde 2012 e recebeu vários erros que nunca foram corrigidos.Finalmente encontrei uma alternativa com essa biblioteca de luzes que exibe bons pontos para o
viewpager
, aqui está o link:https://github.com/ongakuer/CircleIndicator
Fácil de implementar!
fonte
Pensei em postar uma solução mais simples para o problema acima e os números dos indicadores podem ser alterados dinamicamente, com apenas uma alteração no valor da variável
dotCounts=x
.1) Crie um arquivo xml na pasta drawable para o indicador selecionado da página chamado "item_selected".
2) Crie mais um arquivo xml para o indicador não selecionado chamado "item_unselected"
3) Agora adicione e adicione esta parte do código no local em que deseja exibir os indicadores para ex abaixo
viewPager
no seu arquivo XML de layout.4) Adicione esta função no topo do seu arquivo de arquivo de atividade onde seu layout está inflado ou o arquivo xml acima está relacionado a
5) Finalmente, no seu método onCreate, adicione o código a seguir para referenciar seu layout e manipular as posições selecionadas na página
fonte
Você pode experimentar a biblioteca de Jake Wharton - https://github.com/JakeWharton/Android-ViewPagerIndicator
fonte
A seguir, minha solução proposta.
A) A seguir está meu activity_main.xml
B) pager_item.xml
C) MainActivity.java
D) CustomPagerAdapter.java
E) selecteditem_dot.xml
F) nonselecteditem_dot.xml
fonte
Se alguém quiser criar um
viewPager
com miniaturas como indicadores, usar esta biblioteca pode ser uma opção: ThumbIndicator for viewPager que também funciona com links de imagem como recursos.fonte
Aqui está como eu fiz isso, um pouco semelhante às soluções acima. Apenas certifique-se de chamar o método loadDots () após o download de todas as imagens .
fonte