android-将图库滚动到下一页

使用小部件.图库显示项目的水平滚动列表.我已经使用似乎是标准技术的方式在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的开发人员来说,这真是天赐良机.

上一篇:[转]QNX推出用于ADAS和自动驾驶的全新软件平台


下一篇:将样式应用于Android Gallery中的项目