据我所知,您不应该将HorizontalScrollView与ListView一起使用,因为ListView负责自己的滚动。最重要的是,这样做会破坏ListView中处理大型列表的所有重要优化,因为它有效地强制ListView显示其整个项目列表,以填充HorizontalsCrollView提供的无限容器。
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
由于您可能被迫使用二维滚动视图,因此您可以考虑使用:Internet Archive of
blog.gorges.us/2010/06/android-two-dimensional-scrollview/
我没有用过这个,但这可能是一个合理的方法。
也许尝试在XML文件和Java中添加
android:id="@+id/scrollHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/scrollVertical"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
//WateverViewYouWant
代码OnCreate/OnCreateView
final HorizontalScrollView hScroll = (HorizontalScrollView) value.findViewById(R.id.scrollHorizontal);
final ScrollView vScroll = (ScrollView) value.findViewById(R.id.scrollVertical);
vScroll.setOnTouchListener(new View.OnTouchListener() { //inner scroll listener
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
hScroll.setOnTouchListener(new View.OnTouchListener() { //outer scroll listener
private float mx, my, curX, curY;
private boolean started = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
curX = event.getX();
curY = event.getY();
int dx = (int) (mx - curX);
int dy = (int) (my - curY);
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
if (started) {
vScroll.scrollBy(0, dy);
hScroll.scrollBy(dx, 0);
} else {
started = true;
}
mx = curX;
my = curY;
break;
case MotionEvent.ACTION_UP:
vScroll.scrollBy(0, dy);
hScroll.scrollBy(dx, 0);
started = false;
break;
}
return true;
}
});