2

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++;
    }

}
4

1 に答える 1

0

自体には(ListViewリストをスクロールするための) ジェスチャ リスナーが既に組み込まれており、おそらくonItemClickListener、リスト内の個々の項目にも があります。これにより、レイアウト全体のスワイプ動作が妨げられる可能性があります。

ここで Pinhassi によって説明された解決策は、これまでのところ私にとって最も効果的でした: Android Swipe on List

onItemClickListenerおそらく、ListView を拡張して、上記のスワイプ検出器を含める必要があります。また、リストビュー リスナーをオーバーライドするために@Override、宣言する行の前に配置する必要がある場合があります。onItemClickそうすれば、クリック可能なリスト項目を維持し、それらをスワイプできます。

于 2013-03-21T20:46:41.457 に答える