对列表视图的每一行进行滑动检测

时间:2011-07-06 14:15:49

标签: android listview gesture swipe

我有一张位于SD卡中的视频列表。此时,我只需要帮助为列表视图中的每一行创建手势或滑动检测。感谢stackoverflow Fling gesture detection on grid layout上的这个问题,我在listview上实现了这个手势。现在,它可以轻松检测用户何时向右或向左滑动。但这个手势适用于整个列表视图。我只想知道如何为各行实现此滑动检测。例如,应用程序现在可以打印“右扫动”,“向左滑动”。我只是想让它像“在第1行右侧滑动”,“在第3行左侧滑动”等等。我希望我的问题很明确。

期待一些有用的回复。 感谢

6 个答案:

答案 0 :(得分:4)

查看this answer并在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
    }
}

答案 1 :(得分:1)

我在我的解决方案中使用了每项目方法 - 看看here 我的滑动检测代码可能与标准滑动检测有点不同,但它对我来说非常适合。我正在使用附加标签来获取项目相关数据。 希望有所帮助,但如果你确实有一些问题,请告诉我,我会尝试更详细地解释。

答案 2 :(得分:1)

根据Per My Opinion对项目使用布尔值,当触摸该项目时设置为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;
}

}

答案 3 :(得分:0)

我认为您所寻找的是SwipeView(或者甚至是ViewFlow),而不是标准的Android手势检测。

答案 4 :(得分:0)

这个问题已经过时了,但是现在谢天谢地,Jake Wharton向我们提供了一些为ICS发布的代码;这应该允许您滑动各行:https://github.com/JakeWharton/SwipeToDismissNOA

答案 5 :(得分:0)

我们在每行实施了滑动检测功能,以便在此处显示操作并解除项目https://github.com/47deg/android-swipelistview。我希望它有所帮助