Android ListView像Twitter List一样轻扫动作

时间:2011-07-02 12:12:17

标签: java android listview twitter swipe

我正在尝试实施“动作滑动”功能 - 就像您可以在“新”Twitter应用中看到的那样。您可以在swipe for action description找到更详细的说明。

现在,有任何想法/解决方案如何实现此功能?

谢谢!

2 个答案:

答案 0 :(得分:6)

在每行中使用GestureDetector,并将行内容包装在ViewFlipper中。在滑动时,切换ViewFlipper

的子项

我有一个ViewSwiper,它结合了GestureDetectorViewFlipper,但它可以在任何一个方向上工作(例如,从常规行,向左滑动权利会切换到行动),这可能是也可能不是。但是,它应该让你知道这可能如何工作。

答案 1 :(得分:1)

我做了类似于你需要的事情 - 你可以找到一些关于there的信息。我在那里做一些手动的东西,但它很好用。为了您的方便,这里是我使用的代码:

OnTouchListener gestureListener = new View.OnTouchListener() {

    private int padding = 0;
    private int initialx = 0;
    private int currentx = 0;
    private ViewHolder viewHolder;

    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            padding = 0;
            initialx = (int) event.getX();
            currentx = (int) event.getX();
            viewHolder = ((ViewHolder) v.getTag());
        }

        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            currentx = (int) event.getX();
            padding = currentx - initialx;
        }

        if (event.getAction() == MotionEvent.ACTION_UP ||
            event.getAction() == MotionEvent.ACTION_CANCEL) {
            padding = 0;
            initialx = 0;
            currentx = 0;
        }

        if (viewHolder != null) {
            if (padding == 0) {
                v.setBackgroundColor(0xFF000000);
                if (viewHolder.running)
                    v.setBackgroundColor(0xFF058805);
            }
            if (padding > 75) {
                viewHolder.running = true;
                v.setBackgroundColor(0xFF00FF00);
                viewHolder.icon.setImageResource(R.drawable.clock_running);
            }
            if (padding < -75) {
                viewHolder.running = false;
                v.setBackgroundColor(0xFFFF0000);
            }
            v.setPadding(padding, 0, 0, 0);
        }
        return false;
    }
};