更新:请查看有关扩展问题的悬赏。
我在ListView
上设置了一个GestureDetector
。ListView是整个片段,从窗口侧面覆盖另一个部分片段。 我想要给用户关闭它的能力(即,在右侧使用Wunderlist的这个功能是很好的例子)。
这是我的设置:
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
listView.setOnTouchListener(gestureListener);
监听器本身:
public class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 180;
private static final int SWIPE_THRESHOLD_VELOCITY = 50;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
FragmentManager fma = getActivity()
.getSupportFragmentManager();
FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
SherlockListFragment mFrag = new RateReviewFragment();
t.add(R.id.main_frag, mFrag);
t.setCustomAnimations(R.anim.animation_enter,
R.anim.animation_leave);
t.remove(mFrag);
t.commit();
}
return false;
} catch (Exception e) {
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// edited out; this opens up a context menu
}
}
有时,当
ListView
滚动到底部(或在单击列表行时中断列表滚动)时,GestureListener
就会停止监听。无法进行滑动操作。必须向上滚动才能再次正常工作。如果有人可以帮我解决这些问题,我将不胜感激!
更新:只剩下一个问题,“监听器停止监听”。
第二次更新:我可能已经找到了原因;只是不知道如何解决:
在记录我的操作后,我发现了一些东西;我在列表中移动的位置越低(并且与之交互的越多),测量结果就越不一致。例如,如果我在列表的顶部左右移动手指一厘米,它会说我移动了200个像素。但是当我遇到上述问题时,它要低得多,也许只有50个像素,即使是相同的1厘米距离。因此,窗口没有关闭,因为它不符合我的
if
条件。附注:我已经多次说明,问题出现在“与列表交互”时。这意味着:如果我快速从顶部向底部滚动;没有问题;但是如果我缓慢地往下走,也许在屏幕上点击,滚动开关,单击
listView
上的按钮,其中一些会打开一个新的活动(然后回到相同的位置),这就是“交互”。