#java #android #android-recyclerview #android-adapter
#java #Android #android-recyclerview #android-адаптер
Вопрос:
У меня есть ImageView и TextView внутри CardView.
Альфа-код CardView установлен на .5f.
CardView используется в вертикальном RecyclerView.
То, что я пытаюсь здесь сделать, это то, что при прокрутке пользователем повторного просмотра альфа полностью видимого CardView всегда должна меняться на 1f, а для не полностью видимых просмотров карт альфа остается .5f.
Одновременно отображается только один полностью видимый CardView.
Вот что я пробовал, но это не работает.
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int center = recyclerView.getHeight() / 2;
View centerView = recyclerView.findChildViewUnder( recyclerView.getTop(), center);
int centerPos = recyclerView.getChildAdapterPosition(centerView);
if (prevCenterPos != centerPos) {
// dehighlight the previously highlighted view
View prevView =
recyclerView.getLayoutManager().findViewByPosition(prevCenterPos);
if (prevView != null) {
prevView.setAlpha(.5f);
}
// highlight view in the middle
if (centerView != null) {
prevView.setAlpha(1f);
}
prevCenterPos = centerPos;
}
}
Ответ №1:
Поскольку вы находите центральную точку с помощью этого
int center = recyclerView.getHeight() / 2;
какой неправильный способ вы должны использовать:
mLayoutManager.findFirstCompletelyVisibleItemPosition()
попробуйте это:
val firstCompelteVisible = mLayoutManager.findFirstCompletelyVisibleItemPosition()
val centerView =
recyclerView.layoutManager!!.findViewByPosition(firstCompelteVisible)
if (prevCenterPos != centerPos) {
// dehighlight the previously highlighted view
val prevView =
recyclerView.layoutManager!!.findViewByPosition(prevCenterPos)
if (prevView != null) {
prevView.alpha = .5f
}
// highlight view in the middle
if (centerView != null) {
prevView!!.alpha = 1f
}
prevCenterPos = centerPos
}
Я надеюсь, что это сработает.
Комментарии:
1. Это работает только при прокрутке вниз. но при прокрутке всех просмотров карт альфа равна 1f. Мой приведенный выше код работает при прокрутке вверх и вниз. Единственная проблема заключается в том, что при прокрутке вниз, когда я достигаю позиции 4 (вид по центру), его альфа изменяется на1f, что хорошо, но затем сразу же возвращается к .5f.