Android ListView内部的水平滚动视图:次要垂直滚动停止水平滚动
在我的示例活动中,我有Android ListView内部的水平滚动视图:次要垂直滚动停止水平滚动,android,android-layout,Android,Android Layout,在我的示例活动中,我有 -包含 -包含 -一组文本视图 不过,水平滚动的体验相当糟糕。 当我开始水平滚动(或投掷)时,我必须非常小心地使其工作 一旦水平滚动包含(小的)垂直组件,垂直ListView滚动就会接管并完全停止水平滚动 有没有关于如何改进的建议 提前感谢, 马克 导入android.app.Activity; 导入android.database.DataSetObserver; 导入android.os.Bundle; 导入android.view.view; 导入android.v
-包含
-包含
-一组文本视图 不过,水平滚动的体验相当糟糕。
当我开始水平滚动(或投掷)时,我必须非常小心地使其工作 一旦水平滚动包含(小的)垂直组件,垂直ListView滚动就会接管并完全停止水平滚动 有没有关于如何改进的建议 提前感谢, 马克
导入android.app.Activity;
导入android.database.DataSetObserver;
导入android.os.Bundle;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.HorizontalScrollView;
导入android.widget.LinearLayout;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
公共类测试扩展了活动
{
私有最终静态int N=20;//水平滚动视图的数目
private final static int M=20;//单个HorizontalScrollView中的文本视图数
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout布局=新的LinearLayout(本);
//创建水平滚动视图列表
最终水平滚动视图[]hors=新水平滚动视图[N];
对于(int i=0;i
虽然我并没有深入挖掘您的代码,但人们通常犯的错误是在ScrollView中插入listView
由于listview是自动滚动的,所以当其他内容可能在scrollView中时,请将其保留在scrollView之外
检查是否是这种情况,否则共享XML布局问题在于
列表视图
(或者更确切地说,它的父级AbsListView
)实现了对InterceptTouchEvent
,因此列表视图
可以在认为它处于更好的处理位置时立即拦截所有触摸事件
这可以通过调用requestDisallowWinterCeptTouchEvent
来避免,例如通过对HorizontalScrollView
及其dispatchTouchEvent
进行子类化:
public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean ret = super.dispatchTouchEvent(ev);
if(ret)
{
requestDisallowInterceptTouchEvent(true);
}
return ret;
}
它需要一些改进(例如,如果水平组件大于垂直组件,则只调用call
requestdisallowenterceptouchevent
),因为现在它几乎不允许列表视图
控制 Android有一个叫做触摸屏的概念。这里已经回答了一个类似的问题:最好的方法
将给定的代码放在水平listview onScroll方法上,使其工作正常
ViewParent view_parent = getParent();
if (view_parent != null)
{
view_parent.requestDisallowInterceptTouchEvent(true);
}
My ListView是父组件,HorizontalScrollView是ListView的子组件(因此它似乎与您的场景相反)。我没有使用XML布局;所有视图都是在代码中创建的。我想我可以将问题重新表述为“子视图是否可能接收ListView父视图使用的TouchEvents”。这将允许ListView处理移动的垂直部分,而HorizontalScrollView可以处理移动的水平部分。我认为mTouchSlop在这里不相关。最初的问题是一个小的垂直滚动会停止水平滚动,因为此时ListView正在接管。
ViewParent view_parent = getParent();
if (view_parent != null)
{
view_parent.requestDisallowInterceptTouchEvent(true);
}