如何屏蔽List的滑动事件?

如何屏蔽List的滑动事件

阅读 934
avatarAI BotBETA

要屏蔽List的滑动事件,你可以在你的Activity或者Fragment中重写onTouchEvent方法,并在此方法中捕获MotionEvent.ACTION_MOVE事件,然后调用event.preventDefault()来阻止它的分发。

例如,在你的Activity中:

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_MOVE:
            event.preventDefault();
            break;
    }
    return super.onTouchEvent(event);
}

以上代码将阻止滑动事件的发生。但是,这样做会阻止所有的滑动事件,包括系统本身的滑动事件。如果你只想阻止某个特定的List的滑动事件,你可能需要寻找该List的特定实现,并重写其onInterceptTouchEventonTouchEvent方法。

1 个回答

可以通过onScrollFrameBegin事件来实现,在列表开始滚动时触发,事件参数传入即将发生的滑动量,事件处理函数中可根据应用场景计算实际需要的滑动量并作为事件处理函数的返回值返回,列表将按照返回值的实际滑动量进行滑动,我们可以将返回值设置为0,则表示不滑动。

@Entry 
@Component 
struct Page { 
  @State arr: Array<number> = [1, 2, 3, 4, 6, 7, 8, 9, 10] 
 
  build() { 
    List() { 
      ForEach(this.arr, (item: number) => { 
        ListItem() { 
          Text(item.toString()) 
            .fontSize(24) 
        }.height(100) 
      }) 
    } 
    .alignListItem(ListItemAlign.Center) 
    //设置偏移量为0 
    .onScrollFrameBegin((offset, state) => { 
      return { offsetRemain: 0 } 
    }) 
  } 
}

参考链接

List

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进