Вертикальный ListView / CoverFlow центрирует выбранное изображение
Я искал и много пробовал в этой теме. То, что я пытаюсь сделать, это в основном вертикальная галерея /CoverFlow. Я знаю, что это должно быть сделано с помощью специального ListView. И я сделал именно это.
При этом у меня возникают 2 проблемы, которые я просто не могу решить:
я) При прокрутке в списке я хочу, чтобы элементы перемещались в "слоты". Самое главное, что центрированный элемент должен двигаться точно над круглой линией, которую я нарисовал. Для лучшей визуализации: это именно то, что делает "CoverFlow", но горизонтально. Попытка переопределить onScrollStateChanged, кажется, работает недетерминированно. Вот как я это попробовал:
public void registerScrollListener(){
setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
int first = getFirstVisiblePosition();
int last = getLastVisiblePosition();
List<View> childs = new ArrayList<View>();
for(int i = first; i < last; i++){
childs.add(getChildAt(i));
}
int centerHeight = getHeightCenterOfSideView();
int centerPos = 0;
int distance = Integer.MAX_VALUE;
for(View childView : childs){
int newDist = Math.abs(centerHeight - (childView.getTop() + (childView.getHeight()/2)));
if(newDist < distance){
distance = newDist;
centerPos = childs.indexOf(childView);
}
}
View childView = getChildAt(centerPos);
smoothScrollToPosition(centerPos, centerHeight - (childView.getTop() + (childView.getHeight()/2)));
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
}
II) При прокрутке в некруглом ListView, я не могу центрировать последний или первый элемент, так как просмотр списка пуст при дальнейшей прокрутке. Для этого можно добавить несколько дополнительных элементов в конце и в верхней части. Проблема в том, что я хотел бы использовать разделители списка, и это выглядит безобразно с пустыми представлениями в нем. Другое дело, что я хочу сделать это независимым от размера дисплея, что должно быть трудно, так как последний элемент не будет точно отцентрирован.
Может ли кто-нибудь помочь мне с любым из этих двух вопросов? Проще всего было бы просто взять какой-нибудь существующий код.
Спасибо!