我花了很长时间来研究Android中的滚动内容。但是,在我的应用程序中,我需要应用自定义类型的滚动,其中包含listview。列表视图有自己的滚动,滚动视图不应与列表视图一起使用。
但是视图必须有一些固有的滚动功能。关于View的文档确实表明支持,但提供的方法似乎没有提供任何侦听器来检测滚动。
scrollview也建立在FrameLayout上,这在我的应用程序中也会有问题。
您可以使用以下内容滚动LinearLayout:
android:isScrollContainer="true"
但这似乎没有做任何事情。
实际上,您甚至可以为LinearLayout设置滚动条:
android:scrollbars="vertical"
但这似乎也没有做任何事情。
我不想控制滚动,而是有一个侦听器,可以检测屏幕上的滚动,无论列表视图,framelayout或任何其他控件是否可见。我想我正在寻找的是编写我自己的自定义ScrollView控件,但没有FrameLayout的限制以及我不需要的所有不必要的开销。有什么建议吗?
答案 0 :(得分:1)
解决上述问题的方法是拥有2个ScrollView
,其中一个是外部ScrollView
,其中包含所有视图,其他内部Scrollview
代替listview,并在LinearLayout
内添加{1}}动态(内部ScrollView
)
答案 1 :(得分:1)
实际上在做了一些研究之后,我想出了一个解决这个问题的方法:
首先,我想以一种非常简单的方式解释这个问题。
1.LinearLayout将可滚动。
2.为此,我们可以使用ScrollView,但有时我们需要在LinearLayout中使用ListView
3.我们知道在ScrollView中我们不能使用像ListView
如何解决?
ListView本身可以滚动,因此我们可以在ListView中添加页眉和页脚。作为结论:
1.Create Layout header.xml和footer.xml以及list.xml
2.从主活动的list.xml中查找ListView引用,并在ListView引用中动态添加页眉和页脚。
答案 2 :(得分:0)
这似乎是一个可行的解决方案,我测试但不彻底。创建一个扩展LinearLayout的自定义控件,然后覆盖dispatchTouchEvent:
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
MotionEvent vtev = MotionEvent.obtain(event);
final int actionMasked = event.getActionMasked();
float x = event.getRawX();
float y = event.getRawY();
switch (actionMasked)
{
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
int z = 0;
z++;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_POINTER_DOWN:
{
final int index = event.getActionIndex();
break;
}
case MotionEvent.ACTION_POINTER_UP:
break;
}
boolean ret = super.dispatchTouchEvent(event);
return ret;
}
}
然后,您可以将子控件放在此自定义LinearLayout中并检测运动事件,即使存在ListViews和ScrollViews也是如此。这并没有搞乱他们自己的滚动。