使用小部件.图库显示项目的水平滚动列表.我已经使用似乎是标准技术的方式在Gallery中实现了分页:将Gallery子类化并实现:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (velocityX>0) {
onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
} else {
onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
}
点按图库时,我会淡出下一个和上一个图像按钮.单击这些时,我希望图库分别显示到下一页/上一页.我尝试从我的下一个按钮处理程序调用onKeyDown,但是奇怪的是这没有效果.
AbsSpinner具有setSelection(int position,boolean animate)但在Gallery中将忽略动画.
解决方法:
巨嘴鸟说的完全正确,但需要进一步详细说明(评论限制太短):
问题似乎在于,如果该位置还没有子代,则图库不允许用户滚动.当尝试注入事件时,scrollToChild()是元凶:
private boolean scrollToChild(int childPosition) {
View child = getChildAt(childPosition);
if (child != null) {
int distance = getCenterOfGallery() - getCenterOfView(child);
mFlingRunnable.startUsingDistance(distance);
return true;
}
return false;
}
有趣的是,如果您用手指猛扑画廊,将导致创建孩子.然后,如果放开手指(回到原始位置),然后按下激活onKeyDown注射的按钮,它将完美无缺地工作-因为孩子在那里.
不幸的是,没有真正的解决方案,因为该类中的所有内容都是私有的.唯一的解决方案是使用setSpacing(-1)或图库中的某些内容,因此始终会创建并显示左,右子级,但它们仅在当前选定视图的后面.
作为一个脚注,我真的对为什么该类(或与此相关的任何其他Android小部件类)中的所有内容都是私有的感到困惑.这是一些很小的代码更改即可轻松解决的问题之一.
编辑(2012年8月):供以后参考,而不是尝试将Gallery用于这种模式(当您希望用户在不同的项目中可见的同时在不同的项目之间滑动时),使用Android的compatibility package’s ViewPager
class更好在我看来,兼容性软件包并没有得到应有的赞誉(花了我一段时间才注意到它).对于面向Android 2.x的开发人员来说,这真是天赐良机.