ViewPager具有向外滑动功能

时间:2014-10-22 11:51:19

标签: android android-viewpager swipe

我试图实现自定义ViewPager,其功能可以刷掉两侧的片段,顶部片段将从寻呼机适配器中删除(类似STACK)。例如,FragmentPagerAdapter中有5个片段。我使用具有堆叠效果的自定义PageTransformer,第一个片段覆盖第二个片段,第二个片段覆盖第三个片段等。当我滑出第一个(TOP)片段时(无论哪一侧 - 向左滑动并向右滑动到右侧同样效果 - 删除顶部片段)。 你知道ViewPager的实现吗?我试图理解ViewPager的代码,但它有很多代码行,而且很难理解它。这对我来说是黑魔法。我会非常乐于助人帮我解决问题。或者给我一些提示如何实现具有所需功能的自定义ViewPager。

在此视频上显示的功能非常相似: http://youtu.be/533awlmpXr4?list=UUGOLwlIxP5GX-2Rhx_TXwFg

非常感谢!

1 个答案:

答案 0 :(得分:0)

创建手势检测器并将其分配给寻呼机:

mGestureDetector = new GestureDetectorCompat(this, new MyGestureDetector());
mPager.setOnTouchListener(new OnTouchListener()
{           
    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        return mGestureDetector.onTouchEvent(event);
    }
});

这会检测左右滑动。当您检测到此信息后,您可以从寻呼机中删除当前视图或更改订单或....

class MyGestureDetector extends SimpleOnGestureListener
{
    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY)
    {
        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
                return false;
            }
            // right to left swipe
            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && 
                    Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                // left
            }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && 
                    Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                // right
            }
        } catch (Exception e) {
            // nothing
        }
        return false;
    }

    @Override
    public boolean onDown(MotionEvent e)
    {
        return true;
    }
}