Android的列表视图项目的滑动按钮效果

时间:2011-07-01 04:24:04

标签: android listview android-listview slidetoggle

我正在将iPhone应用程序移植到Android应用程序中,其中一个难点是重新创建iPhone原生的功能。

我找到了iPhone的原生功能: 当用户在列表视图中列出的项目上执行幻灯片触摸时,会出现删除按钮。

Android中有这个版本吗? 可以使用和重复使用/定制吗?

4 个答案:

答案 0 :(得分:1)

这实现起来有点复杂。这就是我要从更高层面谈论的内容。

  1. 创建自定义ViewGroup / Layout以保存列表项。在此布局中,您可以使用文本行图像或任何内容,还可以使用删除按钮。您还可以在此处收听手势以隐藏或取消隐藏删除按钮。

  2. 在列表适配器中,您需要跟踪哪个项目显示删除按钮,哪个项目不显示。此外,您还需要为每个列表项删除按钮应用单击侦听器。每次在列表项上指定这些状态时,您应该设置标签(...)并存储列表项位置,以便在单击时可以确定必须删除哪个项目编号。

  3. 删除后,您必须刷新列表才能使其生效。根据您使用的适配器类型,确定如何刷新适配器。

  4. 希望这有一定道理。但我绝对认为这是最简单的方法,因为我已经用类似的功能做了几次。

答案 1 :(得分:0)

我猜你可以尝试在listview本身上实现手势监听器,但可能很难获得正确的id。由于我自己没有这样做,我无法准确回答。

否则,您可以将自己的视图作为列表视图中的项目,并在所有子项上都有一个手势监听器。

Fling gesture detection on grid layout 对于一些基本的阅读和代码示例

答案 2 :(得分:0)

我认为没有任何内置的API函数可以做到这一点。

但是,解决方法是在listitem中的视图上使用onFling函数。您可以使用它来完成您想要的任务。

答案 3 :(得分:0)

这就是我意识到这种效果的方式。我们有一个ListView lvSimple,我们将onTouchListener添加到我们的lvSimple中。这是我的工作代码。

float historicX = Float.NaN, historicY = Float.NaN;
static final int DELTA = 50;
enum Direction {LEFT, RIGHT;}
...
ListView lvSimple = (ListView) findViewById(R.id.linLayout);
...
lvSimple.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        // TODO Auto-generated method stub
        switch (event.getAction()) 
        {
            case MotionEvent.ACTION_DOWN:
            historicX = event.getX();
            historicY = event.getY();
            break;

            case MotionEvent.ACTION_UP:
            if (event.getX() - historicX < -DELTA) 
            {
                FunctionDeleteRowWhenSlidingLeft();
                return true;
            }
            else if (event.getX() - historicX > DELTA)  
            {
                FunctionDeleteRowWhenSlidingRight();
                return true;
            } break;
            default: return false;
        }
        return false;
    }
});

其中函数FunctionDeleteRowWhenSlidingLeft()在我们向左滑动时调用,FunctionDeleteRowWhenSlidingRight - 分别向右移动。在此功能中,您需要粘贴动画代码。

PS。我很抱歉我的英语不好。一直很乐意提供帮助。