我想使用ListView
包含自定义视图的(并且之前已经成功完成此操作)。基本上这些自定义视图是垂直滑块,显然与ListView
. 我用来自 的自定义视图填充它Adapter
,它们会对项目上的触摸做出反应,但是一旦我的手指移动超过几个像素,它就会滚动,并且自定义视图将不再接收任何触摸事件。
ListView
当我触摸自己的组件时,如何(很好地)防止滚动?
我可以以某种方式禁用ListView
选择,并将触摸转发到项目,但仍使用滚动行为吗?
先感谢您。
为了防止列表视图的滚动,您可以按如下方式在触摸侦听器上实现
listView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_MOVE)
{
return true;
}
return false;
}
});
希望它会起作用,如果它对您有用,请投票
您可以截取onInterceptTouchEvent()
在您的根布局中使用的所有触摸事件(包含ListView
,如 a FrameLayout
),如此处所示。
你在那里做的是捕获运动事件(当 aMotionEvent.ACTION_DOWN
进来时返回 true),捕获下面的事件onTouchEvent()
,决定运动是针对列表项还是列表本身,并相应地调度事件。
不要指望这很容易。了解运动事件的流程以及它们之间的交互onInterceptTouchEvent()
是onTouchEvent()
具有挑战性的,并且使其更加有效。但我相信这是解决您的问题的可行方法。