在工程中用到了Gallery,所以就对Gallery做了一些相应的调查和测试。结论是想要实现Gallery每次之滚动一次有两种方法:
方法一: 重写Gallery 的onFling方法,只需要return false即可。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
虽然这个方法比较简单,但是我测试时感觉需要手指滑动很远才能翻页,感觉灵敏度不够高。没有关系我们还可以调整灵敏度。需要重写Gallery的onScroll方法。建议FLINE_SENSITIVITY设置成1.5,因为设置太大,滑动较长的距离仍然会翻滚多个页面。
private static final float FLINE_SENSITIVITY = 1.5f;
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
float f = FLINE_SENSITIVITY * distanceX;
super.onScroll(e1, e2, f, distanceY);
}
方法二:还是重写onFling方法,不过要在方法里面实现一次点击左右按键的操作。这个方法比较稳妥,也很流畅,用户体验也很好,但是滑动的时候会有按键音。
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
return e2.getX() > e1.getX();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int kEvent;
if (isScrollingLeft(e1, e2)) {
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
} else {
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}