-->

更改然后在Android平滑滚动行为(Change Android smooth scroll be

2019-09-23 19:29发布

我有一个ListView和一个Timer我通过调用控制此列表的滚动运动smoothScrollToPositionFromTop(position, offset, duration) 。 该ListView有一个听众OnItemClickListener

如果在平滑滚动的情况是点击一个项目,滚动停止,但onItemClick事件未被触发。 为了做到这一点,你需要在项目再次点击。

我想知道如何重写此行为。 我的意思是, 如果我在项目上点击而平滑滚动停止滚动发生 ,除了, 我想触发onItemClick上单击的项目

我真的不知道,如果有一个简单的方法来做到这一点。 我试着用GestureDetectorOnTouchListener名单,我听onSingleTapConfirmed为了调用performClick在那里,但我不知道如何从该项目是按位置MotionEvent

Answer 1:

我终于找到了一个解决方案,通过使用GestureDetector

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);

就我而言,我加我在做onItemClickonSingleTapConfirmed并删除了OnItemClickListener从列表中。 这就是为什么我还添加了playSoundEffect功能来模拟点击。

在最后一行我禁用亮点ListView点击线以来得到了强调,只有当平滑滚动没有发生。 通过禁用它,我获得每次点击的相同的行为。



文章来源: Change Android smooth scroll behaviour on click