更新:有关扩展问题,请参阅赏金。
我GestureDetector
在ListView
. 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 像素。但是当我遇到上述问题时,对于相同的1 厘米距离,它要低得多,可能是 50。所以窗口没有关闭,因为它不符合我的if
条件。
旁注:我不止一次说过,问题出在“与列表交互”时。这意味着:如果我从上到下快速滚动;没有任何问题; 但是如果我慢慢地向下工作,也许点击屏幕,打开和关闭滚动,单击 上的按钮listView
,其中一些打开一个新活动(然后回到相同的位置),这就是“交互”与“。