Oi eu estou desenvolvendo uma aplicação android com botão Floating Ação.
Na primeira vez que o ícone mostra FAB ícone de imagem. Depois, quando eu ocultar e mostrar a imagem do ícone ficará em branco quando eu clique no ícone FAB
Este é o código que é usado para esconder a FAB
mainScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
// previousScrollY this variable is define in your Activity or Fragment
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "onScrollChanged: scrollview position " + mainScrollView.getScrollY() + " " +
previousScrollY + " " +
mainScrollView.getChildAt(0).getHeight());
if (mainScrollView.getScrollY() > previousScrollY) {
fab.hide();
} else if (mainScrollView.getScrollY() < previousScrollY) {
fab.show();
}
if (mainScrollView.getScrollY() >= mainScrollView.getChildAt(0).getHeight()) {
previousScrollY = mainScrollView.getChildAt(0).getHeight();
} else if (mainScrollView.getScrollY() < 0) {
previousScrollY = 0;
} else {
previousScrollY = mainScrollView.getScrollY();
}
}
}, 200);
}
});
onscrolling para baixo o ícone FAB irá esconder e onScrolling-se o ícone FAB irá mostrar.
E este é o código para FAB setOnClicklistener
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
fab.setImageResource(R.drawable.ic_close);
} else {
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
fab.setImageResource(R.drawable.ic_filter);
}
}
});
Esta é a imagem do ícone fab que aparecem antes do desdobramento e o primeiro tempo de carregamento
esta é a imagem depois de rolagem e clicando.
Eu sei que tem sido um longo tempo desde que você postou isso, mas eu tive o mesmo problema. Eu resolvi fazendo uma hide () e, em seguida, um show () ao fab após clicar. (No meu caso particular, eu mudar o drawable em onClick. Fazendo hide () e show () depois de mudar o drawable resolveu o problema).
Seu código deve ficar assim:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
fab.setImageResource(R.drawable.ic_close);
} else {
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
fab.setImageResource(R.drawable.ic_filter);
}
fab.hide();
fab.show();
}
});