我试图实现自定义ViewPager,其功能可以刷掉两侧的片段,顶部片段将从寻呼机适配器中删除(类似STACK)。例如,FragmentPagerAdapter中有5个片段。我使用具有堆叠效果的自定义PageTransformer,第一个片段覆盖第二个片段,第二个片段覆盖第三个片段等。当我滑出第一个(TOP)片段时(无论哪一侧 - 向左滑动并向右滑动到右侧同样效果 - 删除顶部片段)。 你知道ViewPager的实现吗?我试图理解ViewPager的代码,但它有很多代码行,而且很难理解它。这对我来说是黑魔法。我会非常乐于助人帮我解决问题。或者给我一些提示如何实现具有所需功能的自定义ViewPager。
在此视频上显示的功能非常相似: http://youtu.be/533awlmpXr4?list=UUGOLwlIxP5GX-2Rhx_TXwFg
非常感谢!
答案 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;
}
}