默认情况下,当单击图库项时,图库似乎会自动滚动以使被单击的项居中。我该如何覆盖此行为?我不希望图库在点击时滚动到中心,而是希望它保持原位置。
我认为这是一个正确的解决方案:
@Override
public boolean onSingleTapUp(final MotionEvent e) {
boolean handled = super.onSingleTapUp(e);
onDown(e);
return handled;
}
我认为这就是你在寻找的内容。
首先创建一个继承自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;
}
我以前从未使用过画廊(实际上,我不得不先观看YouTube视频以查看其视觉效果;-)
所以我深入研究了画廊的源代码,对我来说,他们将选择与定位紧密绑定,因此您必须覆盖类并进行一些重要的代码黑客,甚至可能是反射,才能达到您的目标。 我甚至无法告诉您是否会成功。
这不是解决方案,而是提示您如果想要实现它,应该期望什么;-)
图库有一个可以覆盖此方法的方法。
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
我没有尝试过这个...但你可以尝试以下方法:
在onItemClickListener.onItemClick()
中,使用Gallery.getSelectedItemPosition()
确定当前选定的位置,然后使用Gallery.setSelection(int position)
设置该位置。我不知道这是否有效,但你可以试一试。
还有OnItemSelectedListener
,你也可以尝试利用它。
很不幸,我似乎还没有评论别人帖子的能力,但是对于任何发现这个问题但遇到困难的人,请注意,如果您正在创建一个自定义图库来覆盖onSingleTap
方法(如Ohgema所建议的),则需要重写带有Context
和AttributeSet
参数的构造函数。