单击更改Android平滑滚动行为
我有一个单击更改Android平滑滚动行为,android,android-listview,onitemclicklistener,smooth-scrolling,Android,Android Listview,Onitemclicklistener,Smooth Scrolling,我有一个列表视图,我用一个定时器通过调用smoothScrollToPositionFromTop(位置、偏移、持续时间)来控制列表的滚动运动。ListView有一个用于OnItemClickListener的侦听器 如果在平滑滚动过程中单击某个项目,滚动将停止,但不会触发onItemClick事件。为此,您需要再次单击该项目 我想知道如何克服这种行为。我的意思是,如果在平滑滚动时单击某个项目,除了停止滚动之外,我还想在单击的项目上触发onimclick 我真的不知道是否有一个简单的方法来做到这
列表视图
,我用一个定时器
通过调用smoothScrollToPositionFromTop(位置、偏移、持续时间)
来控制列表的滚动运动。ListView
有一个用于OnItemClickListener
的侦听器
如果在平滑滚动过程中单击某个项目,滚动将停止,但不会触发onItemClick
事件。为此,您需要再次单击该项目
我想知道如何克服这种行为。我的意思是,如果在平滑滚动时单击某个项目,除了停止滚动之外,我还想在单击的项目上触发onimclick
我真的不知道是否有一个简单的方法来做到这一点。我尝试使用
手势检测器
来检测列表中的OnTouchListener
,然后我收听SingleTapConfiged上的,以便在其中调用performClick
,但是我不知道如何从运动事件中获取要按下的项目的位置,我最终使用手势检测器找到了一个解决方案:
final GestureDetector gestureDetector = new GestureDetector(MyActivity.this,
new GestureDetector.SimpleOnGestureListener(){
public boolean onSingleTapConfirmed(MotionEvent e) {
int position = listView.pointToPosition((int)e.getX(), (int)e.getY());
if(position != ListView.INVALID_POSITION){
listView.playSoundEffect(SoundEffectConstants.CLICK);
//onItemClick code goes here
//or call listView.performItemClick
return true;
}
return false;
};
});
listView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
listView.setSelector(android.R.color.transparent);
在我的例子中,我在onItemClick
中添加了我在OnSingletAPconfirm
中所做的事情,并从列表中删除了onItemClick侦听器。这就是为什么我还添加了playSoundEffect
函数来模拟点击
在最后一行中,我禁用了在ListView
单击上高亮显示,因为只有在没有平滑滚动的情况下,行才会高亮显示。通过禁用它,我每次单击都会得到相同的行为