Prefácio
Há pouco tempo, li um artigo sobre a Bottom Sheet e , depois de consultar os colegas, decidi implementar isso em nosso aplicativo. Depois de passar horas suficientes para ensinar a Bottom Sheet como viajar em algumas etapas (como o Google Maps), percebi sua embotamento e limitações. Duas soluções foram encontradas: agrupar tudo em um fluxo que monitore o estado da cortina alongada em tempo real ou reescrever alguns métodos da classe BottomSheetBehavior (felizmente, a licença do Apache 2.0 permite fazer isso). Escolhi a segunda opção, porque me pareceu mais viável e agora, com base na minha experiência, tentarei contar o que aconteceu. Espero que isso seja útil para alguém. Bem, vamos começar.
Personalização
Eu pulo as etapas de criação de um projeto, adicionando a Folha de baixo do Google, porque se você ler isso, já terá superado todas as opções acima. Precisamos ir para a classe BottomSheetBehavior e copiar seu conteúdo para a nova classe CustomBottomSheetBehavior que criamos. Depois de copiado, não esqueça de renomear tudo o que estiver marcado em vermelho. Além disso, no arquivo .xml de nossa BottomSheet, devemos renomear esta linha, referindo-se à nossa nova classe, deve ocorrer algo como isto:
app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior"
E assim, temos mais de 700 linhas de código Java que parecem assustadoras, então o que você faz com elas?
Primeiro, você precisa encontrar o método onViewReleased ():
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... }
Precisamos mudar apenas algumas linhas. Encontramos o primeiro se {...} e substituímos seu conteúdo por este código:
if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } }
Agora nossa BottomSheet avança em duas etapas, parando no meio:
(
)
Mudança de altura
Mas isso não é tudo, você pode ajustar a altura média. Para fazer isso, encontre tudo na mesma classe para inicializar a variável halfExpandedOffset:
this.halfExpandedOffset = this.parentHeight / 2;
Ao olhar para esta linha, fica claro que podemos ajustar a altura como desejamos, mesmo em termos percentuais. Pessoalmente, preferi mudar assim:
this.halfExpandedOffset = this.parentHeight * 60 / 100;
(
)
My BottomSheet estende 40% da altura da vista principal. Isso é tudo!