我已经实现了一些手势检测代码,以便在我的ListView(位于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中,并添加适当的高度填充(以覆盖已滑动的行)。
非常感谢您的帮助!