Android-PickerView imita o controle PickerView do iOS

https://github.com/Bigkoo/Android-PickerView
Este é um controle PickerView semelhante ao iOS com um seletor de tempo e um seletor de opção. Os recursos detalhados da nova versão são os seguintes:

——TimePickerView selecionador de tempo, suporta ano, mês, dia, hora, ano, mês, dia, ano, mês, hora e outros formatos.
——Seletor de opçõesOptionsPickerView, suporta seleção de opção de um, dois e três níveis e pode definir se deseja vincular.

  • Suporta três níveis de ligação
  • Defina se deseja vincular
  • Definir modo de loop
  • Suporte para layout personalizado.
  • Suporte para configuração do divisor de itens.
  • Suporte para configuração de espaçamento de item.
  • O seletor de hora suporta a configuração de data de início e término
  • Suporte "ano, mês, dia, hora, minuto, segundo", "província, cidade, distrito" e outras opções de exibição de unidade (etiqueta), ocultar e personalizar.
  • Suporta texto personalizado, cor, tamanho do texto e outros atributos
  • Quando o comprimento do texto do item é muito longo, o texto será adaptado ao comprimento do item para evitar o problema de exibição incompleta
  • Modo de diálogo de suporte.
  • Suporte a contêiner de configuração personalizada.
  • Retorno de chamada em tempo real.

     

Se estiver interessado em estudar o mecanismo de implementação do efeito de roda de rolagem 3D, você pode ler este blog se quiser estudar o código-fonte por completo:

Análise do código-fonte da série Android-PickerView (dois)

Precauções para uso

  • Nota: Quando definimos a posição inicial da hora, precisamos prestar atenção especial à configuração do mês
  • Motivo: o mês no componente Calendário começa em 0, ou seja, 0-11 representa 1-12 meses
  • Caso de uso errado: startDate.set (2013,1,1); endDate.set (2020,12,1);
  • Caso de uso correto: startDate.set (2013,0,1); endDate.set (2020,11,1);

Instruções de atualização da versão V4.1.9 (20/10/2019)

  • Solução: O problema de cruzar ocasionalmente a fronteira no dia lunar.
  • Otimização: exibe o problema de capitalização padrão em chinês e inglês.
  • Novo: O número máximo de itens visíveis fornece API para os desenvolvedores definirem. (setItemVisibleCount ())
  • Recentemente adicionado: a roda de rolagem tem um gradiente de transparência do meio para ambos os lados e fornece uma configuração de API de switch. (IsAlphaGradient (true))
  • Novo: O estilo da linha divisória circular do item selecionado. (DividerType.CIRCLE)

Instruções de atualização da versão V4.1.8 (24/04/2019)

  • Atualize a versão do gradle, a biblioteca de base do wheelview foi alterada de compilar para dependência de API para evitar a incapacidade de introduzir o gradle 5.0+.
  • Corrija o problema de atribuição setTextXOffset.

Instruções de atualização da versão V4.1.7 (10/01/2019)

  • Corrigido o problema de que, quando o WheelView era inicializado, os dados estavam vazios e altura = 0, o que fazia com que não fossem exibidos.
  • Adicionada a entrada de monitoramento de evento de clique do botão cancelar.
  • Adicionadas anotações de parâmetro para padronizar os tipos de dados.
  • O método setBackgroundId é descartado e o método de atualização é denominado setOutSideColor.

Para obter mais detalhes históricos da versão, consulte: log de atualização (versão 4.x)

Nome do método e parâmetros, consulte: nome do método e documento de descrição do parâmetro

 

Como usar:

Exemplo de uso da biblioteca Android-PickerView:

1. Adicionar dependência Jcenter warehouse Gradle:

compile 'com.contrarywind: Android-PickerView: 4.1.9'

ou

Maven

<dependency>
<groupId>com.contrarywind</groupId>
<artifactId>Android-PickerView</artifactId>
<version>4.1.9</version>
<type>pom</type>
</dependency>

2. Adicione o seguinte código ao projeto:

// 选择 选择 器
TimePickerView pvTime = new TimePickerBuilder (MainActivity.this, new OnTimeSelectListener () { 
                           @Override 
                           public void onTimeSelect (Date date, View v) { 
                               Toast.makeText (MainActivity.this, getTime (date), Toast.LENGTH) .show (); 
                           } 
                       }). build ();
// Seletor condicional 
 OptionsPickerView pvOptions = new OptionsPickerBuilder (MainActivity.this, new OnOptionsSelectListener () { 
            @Override 
            public void onOptionsSelect (int options1, int option2, int options3, View v) { 
                // Retornado são três níveis de seleção Location 
                String tx = options1Items.get (options1) .getPickerViewText () 
                        + options2Items.get (options1) .get (opção2) 
                        + options3Items.get (options1) .get (opção2) .get (options3) .getPickerViewText (); 
                tvOptions. setText (tx) ; 
            } 
        }). build (); 
 pvOptions.setPicker (options1Items, options2Items, options3Items); 
 pvOptions.show ();

É isso ~

3. Se o estilo padrão não corresponder ao seu gosto, você pode personalizar vários atributos:

Calendar selectedDate = Calendar.getInstance (); 
 Calendar startDate = Calendar.getInstance (); 
 //startDate.set(2013,1,1); 
 Calendar endDate = Calendar.getInstance (); 
 //endDate.set(2020,1, 1); 
 
  // Razão para o método de configuração correto: os cuidados são explicados 
  startDate.set (2013,0,1); 
  endDate.set (2020,11,31); 

 pvTime = new TimePickerBuilder (this, new OnTimeSelectListener () { 
            @Override 
            public void onTimeSelect (Date date, View v) {// Selecionar callback de evento 
                tvTime.setText (getTime (date)); 
            } 
        }) 
                .setType (new boolean [] {true, true, true, true, true, true }) // Todos são exibidos por padrão. 
                SetCancelText ("Cancelar") // Cancelar o texto do botão
                .setSubmitText ("Sure") // Botão de confirmação 
                text.setContentSize (18) // Roda de rolagem do texto 
                size.setTitleSize (20) // Título do texto 
                size.setTitleText ("Title") // Title 
                text.setOutSideCancelable (false) / / Clique na tela, quando o ponto estiver fora do controle, se deseja cancelar o 
                display.isCyclic (true) // Se rolar em um 
                loop.setTitleColor (Color.BLACK) // texto do título 
                color.setSubmitColor (Color.BLUE ) // Texto do botão OK 
                color.setCancelColor (Color.BLUE) // Cancelar cor do texto do botão. 
                SetTitleBgColor (0xFF666666) // Cor de fundo do título Modo noturno 
                .setBgColor (0xFF333333) // Cor de fundo da roda de rolagem Modo noturno 
                .setDate (selectedDate) // Se não for definido, o padrão é System Time * / 
                .setRangDate (startDate, endDate) // Defina o início e o fim do ano, mês e dia
                .setLabel ("ano", "mês", "dia", "hora", "minuto", "segundo") // A configuração padrão é ano, mês, dia, hora, minuto e segundo.
                .isCenterLabel (false) // Se exibir apenas o texto do rótulo do item selecionado no meio, false significa que cada item tem um rótulo. 
                .isDialog (true) // Se é exibido como um diálogo 
                style.build ();
pvOptions = new OptionsPickerBuilder (this, new OptionsPickerView.OnOptionsSelectListener () { 
            @Override 
            public void onOptionsSelect (int options1, int option2, int options3, View v) { 
                // 的 的 分别 是 三个 级别 的 选中 位置
                String tx = options1Items. get (options1) .getPickerViewText () 
                        + options2Items.get (options1) .get (option2) 
                        + options3Items.get (options1) .get (option2) .get (options3) .getPickerViewText (); 
                tvOptions.setText (tx); 
            } 
        }) .setOptionsSelectChangeListener (new OnOptionsSelectChangeListener () { 
                              @Override
                              public void onOptionsSelectChanged (int options1, int options2, int options3) { 
                                  String str = "options1:" + options1 + "\ noptions2:" + options2 + "\ noptions3:" + options3; 
                                  Toast.makeText (MainActivity.this, str, Toast.LENGTH_SHORT) .show (); 
                              } 
                          }) 
                .setSubmitText ("OK") // Botão OK 
                text.setCancelText ("Cancelar") // Botão Cancelar 
                text.setTitleText ("Seleção de cidade") // 
                Title.setSubCalSize ( 18) // Determine e cancele o texto 
                size.setTitleSize (20) // Título do texto  
                size.setTitleColor (Color.BLACK) // Cor do texto do título
                size.setSubmitColor (Color.BLUE) // Cor do texto do botão OK
                .setCancelColor (Color.BLUE) // Texto do botão Cancelar 
                color.setTitleBgColor (0xFF333333) // Cor de fundo do título Modo noturno 
                .setBgColor (0xFF000000) // Cor de fundo da roda de rolagem Modo noturno 
                .setContentTextSize (18) // 
                Tamanho do texto da roda de rolagem . setLinkage (false) // Definir se deseja vincular, o padrão é 
                true.setLabels ("Province", "City", "District") // Definir a 
                unidade de três níveis selecionada.isCenterLabel (false) // Se exibir apenas o texto do rótulo do item selecionado no meio, se falso, cada item possui um rótulo. 
                .setCyclic (false, false, false) // Ciclo ou não. 
                setSelectOptions (1, 1, 1) // Define o item selecionado padrão. 
                setOutSideCancelable (false) // Clique no padrão de dispensar externo true
                .Construir(); 
                .isDialog (true) // Se deve exibir como estilo de diálogo
                .isRestoreItem (true) // Se restaurar ao alternar, o primeiro item é selecionado por padrão. 

        pvOptions.setPicker (options1Items, options2Items, options3Items); // Adicionar fonte de dados

4. Se você precisar personalizar o layout:

        // Observação: no layout personalizado, o layout com id de optionspicker ou timepicker e seus subcontroles devem estar presentes, caso contrário, ele relatará um ponteiro nulo. 
        // Para obter detalhes, consulte os dois layouts personalizados na 
        demonstração pvCustomOptions = new OptionsPickerBuilder (this, new OptionsPickerView.OnOptionsSelectListener () { 
            @Override 
            public void onOptionsSelect (int options1, int option2, int options3, View v) { 
                // Retornados são três níveis de posições selecionadas 
                String tx = cardItem.get (options1) .getPickerViewText (); 
                btn_CustomOptions.setText (tx); 
            } 
        }) 
                .setLayoutRes (R.layout.pickerview_custom_options, new CustomListener () { 
                    @Override 
                    public void customLayout (Ver v) {
                        // Controle de inicialização e manipulação de eventos no layout personalizado 
                        ivCancel.setOnClickListener View.OnClickListener () {
                        final TextView tvSubmit = (TextView) v.findViewById (R.id.tv_finish); 
                        final TextView tvAdd = (TextView) v.findViewById (R.id.tv_add); 
                        ImageView ivCancel = (ImageView) v.findViewById (R.id.iv_cancel); 
                        tvSubmit.setOnClickListener (new View.OnClickListener () { 
                            @Override 
                            public void onClick (View v) { 
                                pvCustomOptions.returnData (tvSubmit); 
                            } 
                        }); 
                            @Override 
                            public void onClick (Ver v) {
                                pvCustomOptions.dismiss (); 
                            } 
                        }); 

                        tvAdd.setOnClickListener (new View.OnClickListener () { 
                            @Override 
                            public void onClick (Exibir v) { 
                                getData (); 
                                pvCustomOptions.setPicker (cardItem); 
                            } 
                        }); 

                    } 
                }) 
                .build (); 
        pvCustomOptions.setPicker (cardItem); // 添加 数据

5. Se você tiver alguma dúvida sobre o uso, consulte o código de demonstração

Por favor, me cutuque para ver o código de demonstração

6. Se você só precisa do controle básico WheelView para estender a lógica de implementação por si só, pode adicionar diretamente a biblioteca de controle básico. O Gradle depende de:

compile 'com.contrarywind:wheelview:4.1.0'

WheelView usa exemplo de código:

layout xml:

<com.contrarywind.view.WheelView 
            android: id = "@ + id / wheelview" 
            android: layout_width = "match_parent" 
            android: layout_height = "wrap_content" />

Código Java:

WheelView wheelView = findViewById (R.id.wheelview); 

        wheelView.setCyclic (false); 

        Lista final <String> mOptionsItems = new ArrayList <> (); 
        mOptionsItems.add ("item0"); 
        mOptionsItems.add ("item1"); 
        mOptionsItems.add ("item2"); 
  
        wheelView.setAdapter (new ArrayWheelAdapter (mOptionsItems)); 
        wheelView.setOnItemSelectedListener (novo OnItemSelectedListener () { 
            @Override 
            public void onItemSelected (int index) { 
                Toast.makeText (MainActivity.this "" + mOptionsItems.get (índice), Toast.LENGTH_SHORT) .mostrar (); 
            } 
        });

Imagem de efeito (o seletor de condição em "Vida portátil" do cartão de crédito do China Merchants Bank, eles usam minha biblioteca, você pode consultá-la para projetos reais)

 

obrigado

 

Acho que você gosta

Origin blog.csdn.net/az44yao/article/details/112599944
Recomendado
Clasificación