web-dev-qa-db-ja.com

リストビューの各行のスワイプ検出

SDカードにあるビデオのリストがあります。この時点で、リストビューの各行のジェスチャまたはスワイプ検出を作成するためのヘルプが必要です。 stackoverflowでのこの質問のおかげで グリッドレイアウトでのフリングジェスチャ検出 、リストビューにジェスチャを実装しました。ユーザーが右方向または左方向にスワイプしたことを簡単に検出できるようになりました。ただし、このジェスチャはリストビュー全体を対象としています。個々の行にこのスワイプ検出を実装する方法を知りたいだけです。たとえば、アプリケーションは「右スワイプ」、「左スワイプ」を印刷するトーストを作成するようになりました。 「1行目を右にスワイプ」、「3行目を左にスワイプ」などのようにしたいと思います。質問が明確だったと思います。

いくつかの役立つ返信を楽しみにしています。ありがとう

21
Farhan Khurshid

この回答 を調べて、onFlingイベント内で pointToPosition メソッドを使用します

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    try {
        Toast.makeText( listAdapter.getItem( listView.pointToPosition(Math.round(e1.getX()), Math.round(e1.getY())).toString());
        return super.onFling();
    } catch( Exception e ) {
        // do nothing
    }
}
4

私は自分のソリューションでアイテムごとのアプローチを使用しています-見てください ここ 私のスワイプ検出コードは標準のスワイプ検出とは少し異なるかもしれませんが、それは私にとっては完璧に機能します。また、添付のタグを使用してアイテム関連のデータを取得しています。お役に立てば幸いですが、ご不明な点がございましたら、お気軽にお問い合わせください。詳しく説明させていただきます。

1
MariuszP

私の意見によると、アイテムにブール値を使用します。そのアイテムにタッチすると、trueに設定され、onTouchListenerを使用します。

ListItem.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent event) {
            click=true;
            return click;


        }

    });`

次に、これをオーバーライドできます。

 @Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
Log.v("Inside", "=====Dispatch Event===");
if(click){
    Log.v("Inside", "=====Dispatch Event=T==");
    click=false;
     return gestureDetector.onTouchEvent(ev);

}else{
    return false;
}

}
1
Surej

この質問は古いものですが、ありがたいことに、JakeWhartonがICS here;これにより、個々の行をスワイプできるようになるはずです: https://github.com/JakeWharton/SwipeToDismissNOA

0
Oleg Vaskevich

ここでアクションを明らかにし、アイテムを閉じるために、行ごとにスワイプ検出を実装しました https://github.com/47deg/Android-swipelistview 。お役に立てば幸いです

あなたが探しているのは、標準のAndroidジェスチャ検出ではなく、 SwipeView (またはおそらく ViewFlow ))だと思います。

0
Reinier