在没有ScrollView

时间:2015-05-11 11:37:12

标签: android scroll

我花了很长时间来研究Android中的滚动内容。但是,在我的应用程序中,我需要应用自定义类型的滚动,其中包含listview。列表视图有自己的滚动,滚动视图不应与列表视图一起使用。

但是视图必须有一些固有的滚动功能。关于View的文档确实表明支持,但提供的方法似乎没有提供任何侦听器来检测滚动。

scrollview也建立在FrameLayout上,这在我的应用程序中也会有问题。

您可以使用以下内容滚动LinearLayout:

android:isScrollContainer="true"

但这似乎没有做任何事情。

实际上,您甚至可以为LinearLayout设置滚动条:

android:scrollbars="vertical"

但这似乎也没有做任何事情。

我不想控制滚动,而是有一个侦听器,可以检测屏幕上的滚动,无论列表视图,framelayout或任何其他控件是否可见。我想我正在寻找的是编写我自己的自定义ScrollView控件,但没有FrameLayout的限制以及我不需要的所有不必要的开销。有什么建议吗?

3 个答案:

答案 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也是如此。这并没有搞乱他们自己的滚动。