当视图包含列表视图时,Android OnGestureListener会发出问题

时间:2013-03-21 19:02:43

标签: java android android-listview gesture-recognition

我对Android onGestureListener有一些问题,我在线性布局中有3个水平布局水平排列,线性布局位置设置为中间布局onCreate,中间布局还包含一个列表视图,我想要发生的是当我向左或向右滑动布局移动时,当我尝试使用其中的列表视图在线性布局上向左或向右滑动时,这似乎不会拾取手势,但是如果我向右滑动或者留在其他没有任何东西的视图中,它会选择手势,视图也会相应地动画,有没有人之前有这个问题,或者知道如何修复它?任何帮助都会有很长的路要走,谢谢

@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    return gestureDetector.onTouchEvent(event);
}

SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {

        float sensitvity = 50;
        if ((e1.getX() - e2.getX()) > sensitvity) {
            slideLeft();
        } else if ((e2.getX() - e1.getX()) > sensitvity) {
            slideRight();
        }

        return true;
    }

};

private void slideRight() {

    if (swipeDirection > -1) {
        if (swipeDirection == 0) {
            layoutContainer.animate().translationX(theDistance - 0)
            .setDuration(500);
        } else {
            //go to home
            layoutContainer.animate().translationX(0).setDuration(500);
        }

        swipeDirection--;
    }

}

private void slideLeft() {

    if (swipeDirection < 1) {
        if (swipeDirection == 0) {
            layoutContainer.animate().translationX(0 - theDistance)
            .setDuration(500);
        } else {
            layoutContainer.animate().translationX(0).setDuration(500);
        }

        swipeDirection++;
    }

}

1 个答案:

答案 0 :(得分:0)

ListView本身已经内置了一个手势监听器(用于滚动列表),并且可能在列表中的各个项目上也有一个onItemClickListener。这可能会干扰整个布局的滑动行为。

Pinhassi解释的解决方案到目前为止对我来说效果最好: Android Swipe on List

可能您需要扩展ListView的onItemClickListener并包含上面提到的滑动检测器。此外,可能需要将@Override放在您声明onItemClick的行的前面来覆盖listview侦听器。这样,您将维护可单击的列表项,并且可以对它们执行滑动。