设置滑动方法:
myGallery.onFling(null, null, -2000, 0);
第三个参数
,数值是滑动距离
正数时:向左切换,
负数时:向右切换
看源码发现,除了第三个参数
其他三个参数都无用
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (!mShouldCallbackDuringFling) {
// We want to suppress selection changes
// Remove any future code to set mSuppressSelectionChanged = false
removeCallbacks(mDisableSuppressSelectionChangedRunnable);
// This will get reset once we scroll into slots
if (!mSuppressSelectionChanged) mSuppressSelectionChanged = true;
}
// Fling the gallery!
mFlingRunnable.startUsingVelocity((int) -velocityX);
return true;
}
总结下,为什么其他三个参数无效
1.先说第四个参数
Gallery
,第一句描述就是A view that shows items in a center-locked, horizontally scrolling list
翻译:一个锁定竖直方向,水平方向滑动的列表view
第四个参数是设置竖直方向滑动距离,不符合锁定竖直方向这一条。所以也没用了
2.第一和第二个参数:
首先onFling
方法中最终执行的代码是下边这句,
mFlingRunnable.startUsingVelocity((int) -velocityX);
源码中的startUsingVelocity
方法
@UnsupportedAppUsage
public void startUsingVelocity(int initialVelocity) {
if (initialVelocity == 0) return;
startCommon();
int initialX = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
mLastFlingX = initialX;
mScroller.fling(initialX, 0, initialVelocity, 0,
0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
post(this);
}
这个方法里最终调用的是Scroller
的fling
方法
这里int initialX = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
这里设置了起始位置,是最大值还是0,
所以不需要第一
第二
个参数的MotionEvent
, 来提供水平的位置信息,而竖直方向不能滑动,所以也不需要。
所以你要是使用Gallery
的onFling
方法,只要传第三个参数就行了。