Я реализовал некоторый код для обнаружения жестов, чтобы я мог определять, когда строка в моем списке просмотра (которая находится в FrameLayout) была проведена.
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
int itemId = MainActivity.this.getListView().pointToPosition((int) e1.getX(),(int) e1.getY());
Offer order = (Offer)MainActivity.this.getListView().getAdapter().getItem(itemId);
View v = MainActivity.this.getListView().getChildAt(itemId);
}
}
Я хочу отобразить представление поверх строки со сдвигом с набором контекстно-зависимых параметров для этой строки.
Мои проблемы в том, что следующие методы:
v.getTop()
v.getBottom()
возвращает правильные значения только до того, как просмотр был прокручен. Я мог бы, вероятно, сделать некоторые расчеты для определения смещений, используя позиции прокрутки и т. Д., Но я также заметил, что я получаю значения только тогда, когда я проведу строку, которая видна на экране для начала. Если прокрутить список вниз, а затем провести пальцем по строке (которая изначально не была за кадром), эти методы возвращают нулевые значения.
Методы, описанные ниже, похоже, имеют ту же проблему ...
v.getLocationOnScreen(loc)
v.getLocationInWindow(loc)
В конечном счете, я ищу, чтобы найти расстояние между вершиной видимого listView и строкой, которая была проведена. Затем я буду использовать это расстояние, чтобы добавить представление к родительскому FrameLayout с соответствующим отступом по высоте (чтобы оно охватывало измененную строку).
Любая помощь будет высоко ценится!