gpt4 book ai didi

android - Gesturelistener onFling 行为不一致

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:26 26 4
gpt4 key购买 nike

更新:查看扩展问题的赏金。

我在 ListView 上设置了一个 GestureDetector。 ListView 是一个完整的 fragment ,来自窗口的一侧并部分覆盖另一个 fragment 。我想让用户能够将其滑动关闭(即奇妙 list 是右侧此功能的一个很好的例子)。

这是我的设置:

    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 上的按钮,其中一些会打开一个新的 Activity (然后返回到相同的位置),这是“互动”。

最佳答案

试试这个,

    gestureDetector = new GestureDetector(getActivity(),
new GestureListener());
View.OnTouchListener gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
listView.onTouchEvent(event);
gestureDetector.onTouchEvent(event);

return true;
}
};
listView.setOnTouchListener(gestureListener);

并进行如下修改

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return true;
}

编辑:我看到了应用奇妙 list ,如果您想模拟该功能,请尝试这种方法,

将 onInterceptTouch 用于根布局(listView 是其子布局),在此方法中,您必须检查用户是否滑动,如下所示,

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
if(/* Check your condition here */) {
// User has swiped
return true;
}
}

return false; // return false so that the event will be passed to child views.
}

了解更多信息 Android onInterceptTouchEvent

关于android - Gesturelistener onFling 行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16971808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com