默认情况下,当单击图库项目时,图库会自动滚动以使所单击的项目居中。我该如何覆盖此行为?我不希望画廊在点击时滚动到中心,我希望它保持原样。
答案 0 :(得分:8)
我认为这是一个正确的解决方案:
@Override
public boolean onSingleTapUp(final MotionEvent e) {
boolean handled = super.onSingleTapUp(e);
onDown(e);
return handled;
}
答案 1 :(得分: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;
}
答案 2 :(得分:1)
我之前从未使用过画廊(实际上我必须先观看YouTube视图才能看到它的视觉效果; - )
所以我深入了解了画廊的源代码,在我看来,他们已经将选择权与定位相结合,所以你必须覆盖这个类并做一些沉重的代码破解,甚至是反射,才能达到你的目标。我甚至不知道你是否会成功。
这不是一个解决方案,但如果你想要意识到这一点,你应该期待什么; - )
答案 3 :(得分: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();
}
});
}
答案 4 :(得分:0)
我没有尝试过这个......但你可以尝试以下方法:
在onItemClickListener.onItemClick()
中,使用Gallery.getSelectedItemPosition()
确定当前选定的排名,然后使用Gallery.setSelection(int position)
设置排名。我不知道这是否有效,但你可以试一试。
您还可以尝试利用OnItemSelectedListener
。
答案 5 :(得分:0)
很遗憾,我似乎无法对其他人的帖子发表评论,但对于发现此问题但遇到问题的人,请注意,如果您要创建一个覆盖onSingleTap
的自定义图库方法(由Ohgema建议),您需要覆盖constructor that takes a Context
and an AttributeSet
。