【发布时间】:2013-06-06 20:42:13
【问题描述】:
更新:查看扩展问题的赏金。
我在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 像素。但是当我遇到上述问题时,对于 SAME 1 厘米的距离来说,它要低得多,可能是 50。所以窗口不会关闭,因为它不符合我的if 条件。
旁注:我不止一次说过,问题出在“与列表交互”时。这意味着:如果我从上到下快速滚动;没有任何问题;但是如果我慢慢地向下工作,也许点击屏幕,打开和关闭,点击listView上的按钮,其中一些打开一个新的活动(然后回到相同的位置),这就是“互动”与”。
【问题讨论】:
-
如果您正在寻找新的 gmail 应用程序类型的左侧滑动抽屉,您可能想看看这个 - developer.android.com/training/implementing-navigation/…
-
@Varun 这不是那种用于导航的滑块。我实际上已经在左侧..这是一个右侧弹出以显示内容。