Android 触摸cutsom view时不要滚动ListView

Android 触摸cutsom view时不要滚动ListView,android,listview,custom-view,Android,Listview,Custom View,我已经创建了一个自定义视图,您可以在该视图上用手指绘制路径。它扩展了视图类 当我在ListView中使用它作为它的一个项目时,如果用户触摸自定义视图,ListView就会滚动。我怎样才能防止这种情况发生 我想我需要以某种方式关注我的自定义视图。但我不知道怎么做 更新: 我找到了可能的解决办法。在自定义视图的onTouchEvent(运动事件)方法中,我放置了getParent().requestDisallowWinterCeptouchevent(true) 如果没有此选项,用户触摸自定义视图

我已经创建了一个自定义视图,您可以在该视图上用手指绘制路径。它扩展了视图类

当我在ListView中使用它作为它的一个项目时,如果用户触摸自定义视图,ListView就会滚动。我怎样才能防止这种情况发生

我想我需要以某种方式关注我的自定义视图。但我不知道怎么做

更新:

我找到了可能的解决办法。在自定义视图的
onTouchEvent(运动事件)
方法中,我放置了
getParent().requestDisallowWinterCeptouchevent(true)

如果没有此选项,用户触摸自定义视图时的事件队列如下所示:

  • MotionEvent.ACTION\u关闭
  • MotionEvent.ACTION\u移动
  • MotionEvent.ACTION\u移动
  • MotionEvent.ACTION\u取消

  • 当我收到带有code
    MotionEvent的
    MotionEvent.ACTION\u CANCEL
    时,
    ListView
    开始滚动。

    我想你也应该扩展ListView小部件。

    正如您所说,当您触摸自定义视图时,listview将滚动。
    当您触摸自定义视图时,触摸事件将沿视图层次结构发送,
    我认为listview可能会吃掉touch事件。
    因此,您的customview无法接收触摸事件。
    如果您不了解触摸事件的发送。
    你可以读这个

    终于。
    我建议您扩展ListView并重写onInterceptTouchEvent()方法。
    您可以决定您的ListView是否要在onInterceptTouchEvent()中处理触摸事件。
    当您判断触摸应由drawPathView处理时,
    您可以让ListView不拦截它。
    因此,您的drawPathView可以获取toch事件。

    而且listView也不会在孩子的
    onTouch(View,MotionEvent)
    方法中滚动设置
    RequestDisallowWinterCeptTouchEvent(true)

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            ViewGroup item = (ViewGroup) inflater.inflate(R.layout.list_item, null);
            Button button = (Button)item.findViewById(R.id.list_item_btn);
            button.setText("button " + position);
    
            button.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    listView.requestDisallowInterceptTouchEvent(true);
                    return false;
                }
    
            });
    
            return item;
        }
    

    您能从正在使用的适配器获取视图的索引吗?因为,如果可以的话,这只是一个
    setSelection()
    @Swayam的问题。该视图还包含从自定义视图中显示的几个其他视图
    setSelection()
    选择一行。这不是我需要的。请原谅我太天真了,但是如果你选择了包含自定义视图的行,这不应该对你有用吗?@Swayam我不需要选择该行。当我触摸自定义视图时,我需要防止listview滚动。如果选择一行,listview仍然可以滚动,不是吗?哦,好的。。直到现在我才真正理解你的问题。我会看一看,试着让它工作。在此之前,祝你一切顺利。我不认为这种方法适合我。首先,我能够在自定义视图上画一条很短的线,因此它会在短时间内接收触摸事件,但会失去焦点。其次,按钮,例如,阻止ListView滚动:如果您触摸ListView上的按钮并尝试滚动,这不会发生。所以它在那里是正确的。我懂了。我认为ListView会在垂直移动超过一段距离后开始滚动,以便绘制排序路径,当绘制排序路径时,移动的距离小于触发距离。如果移动的距离超过触发距离,则ListView开始滚动。你这么认为吗?我看到了你的最新消息。我建议你读一读我经常读的那篇文章。然后你就会知道为什么你会得到行动取消事件。