安卓相册点击无法滚动

4

默认情况下,当单击图库项时,图库似乎会自动滚动以使被单击的项居中。我该如何覆盖此行为?我不希望图库在点击时滚动到中心,而是希望它保持原位置。

6个回答

8

我认为这是一个正确的解决方案:

    @Override
public boolean onSingleTapUp(final MotionEvent e) {     
    boolean handled = super.onSingleTapUp(e);
    onDown(e);

    return handled;
}

我最终重新测试了一下。这个很好用,谢谢。我已经放弃了,很高兴回来检查。 - drod

2

我认为这就是你在寻找的内容。

首先创建一个继承自Gallery的类,然后重写onSingleTapUp方法:

@Override
public boolean onSingleTapUp(final MotionEvent e) {
    final OnItemClickListener listener = getOnItemClickListener();
    final View selectedView = getSelectedView();

    final float tapX = e.getRawX();
    final float tapY = e.getRawY();

    if ((selectedView != null) && (listener != null)
            && (tapX >= selectedView.getLeft()) && (tapX <= selectedView.getRight())
            && (tapY >= selectedView.getTop()) && (tapY <= selectedView.getBottom())) {

        final int selectedPosition = getSelectedItemPosition();

        listener.onItemClick(this, selectedView, selectedPosition, selectedPosition);
    }

    return true;
}

1

我以前从未使用过画廊(实际上,我不得不先观看YouTube视频以查看其视觉效果;-)

所以我深入研究了画廊的源代码,对我来说,他们将选择与定位紧密绑定,因此您必须覆盖类并进行一些重要的代码黑客,甚至可能是反射,才能达到您的目标。 我甚至无法告诉您是否会成功。

这不是解决方案,而是提示您如果想要实现它,应该期望什么;-)


我刚回到这个问题。根据我的发现,你所说的是正确的。我将尝试复制图库源代码并实现为自己的图库类。如果有任何关于此主题的推荐阅读,那就太棒了。谢谢。 - drod

0

图库有一个可以覆盖此方法的方法。

 gallery.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
    }
});

}


这个回答如何解答问题? - Noel
那么,在onItemClick中,我需要做什么才能防止默认的滚动到中心发生呢?谢谢。 - drod

0

我没有尝试过这个...但你可以尝试以下方法:

onItemClickListener.onItemClick()中,使用Gallery.getSelectedItemPosition()确定当前选定的位置,然后使用Gallery.setSelection(int position)设置该位置。我不知道这是否有效,但你可以试一试。

还有OnItemSelectedListener,你也可以尝试利用它。


0

很不幸,我似乎还没有评论别人帖子的能力,但是对于任何发现这个问题但遇到困难的人,请注意,如果您正在创建一个自定义图库来覆盖onSingleTap方法(如Ohgema所建议的),则需要重写带有ContextAttributeSet参数的构造函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接