安卓列表视图项的Slide In按钮效果

11

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

我发现了iPhone的原生功能: 当用户在列表视图中执行滑动触摸时,会出现删除按钮。

在Android中有相应的版本吗? 它能被使用、重复使用/自定义吗?


1
相反,它们具有特定的行为方式。例如,在长按时会出现一系列选项列表。 - ngesh
我真的很想知道这个.... :) - Kartik Domadiya
4个回答

1

这个实现起来有点复杂。从高层次上讲,我会这样做:

  1. 创建一个自定义的ViewGroup/Layout来容纳列表项。在这个布局中,您可以放置文本行、图像或其他内容以及删除按钮。此外,您还需要监听手势以隐藏或显示删除按钮。

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

  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()。在这个函数中,您需要粘贴动画代码。

附注:对于我的糟糕英语表示歉意。随时乐意提供帮助。


0

我猜你可以尝试在listview本身上实现手势监听器,但是可能很难获得正确的ID。由于我自己没有做过,所以无法回答确切的问题。

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

网格布局上的Fling手势检测 进行一些基本阅读和代码示例


0

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

然而,一个解决方法是在列表项视图中使用onFling函数。你可能可以使用它来实现你想要的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接