通过Views和ViewGroup向下传递触摸事件

时间:2011-07-30 18:34:04

标签: android android-layout

我有一个FrameLayout,里面有ScrollView和LinearLayout。 ScrollView和LinearLayout都具有相同的尺寸,因此它们被覆盖并且LinearLayout覆盖并隐藏ScrollView。 ScrollView内部有TextView和一个Button。

情况就是这样:

+FrameLayout
      +ScrollView
            + LinearLayout 1
                + TextView
                + Button
      +LinearLayout 2 

有时位于顶部的LinearLayout2会被动画化并离开屏幕。出于布局原因,我无法将其设置为GONE,这就是问题所在。 动画结束后,显示ScrollView,我需要与ScrollView交互,例如单击按钮并显然滚动,但所有事件总是被LinearLayout 2捕获,因为它始终将Visibility设置为VISIBLE,即使实际上是隐藏在屏幕之外。

那么,我怎样才能将触摸事件传递给scrollview及其子节点?```

**编辑**

这是我的XML。所以你可以更好地理解。 这个想法是什么? 这种布局由4个滑动抽屉组成。当用户点击其中一个时,点击的抽屉会显示动画并变成一种标题,其他标题会从屏幕上移出并隐藏,滚动视图可以看到,可以与用户进行交互。

例如:我点击第二个抽屉,第三个抽屉,免责声明,第一个上升到屏幕外,第二个,已被点击,在scree的顶部作为标题。如果我再次点击现在位于顶部的第二个抽屉,我会在开始时恢复初始布局,始终使用动画。为此,我添加了Trasparent Layout,它与顶部的抽屉具有相同的尺寸,以处理点击事件,因此每当我为抽屉设置动画时,我都会避免设置新的布局。

我想要的是当滚动视图变得可见并且内部包含所有内容时与滚动视图进行交互。

问题:我无法将抽屉设置为GONE,因为wieght参数会影响它们的高度,但仅限于INVISIBLE。那么,如何与下面的滚动视图进行交互?

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/programma_layout_root"
    android:layout_width="fill_parent" android:layout_height="fill_parent">


    <!-- SCROLLVIEW HIDDEN FIRST LAYER -->
    <ScrollView android:id="@+id/programma_content_scroll"  android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="top">

        <LinearLayout android:id="@+id/programma_layout_disclaimer_content"
            android:layout_height="fill_parent" android:layout_width="fill_parent"
            android:orientation="vertical" android:visibility="invisible">

            <TextView android:id="@+id/programma_layout_disclaimer_content_text"
                android:layout_width="fill_parent" android:layout_height="wrap_content"
                android:text="some text..." />

            <Button android:id="@+id/programma_layout_disclaimer_content_button"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_gravity="center|bottom" android:text="CLICK" />

        </LinearLayout>

    </ScrollView>


    <!-- LAYOUT FOREGROUND SECOND LAYER -->
    <LinearLayout android:id="@+id/programma_layout_container" 
        android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:weightSum="19">

        <include android:id="@+id/header_placeholder" layout="@layout/header" />

        <!-- DISCLAIMER DRAWER -->
        <RelativeLayout android:id="@+id/programma_layout_disclaimer"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="4" >



        </RelativeLayout>

        <!-- FIRST DRAWER -->
        <RelativeLayout android:id="@+id/programma_layout_first"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="5" android:visibility="visible"
            >

            <!-- some stuff here (text, image...) -->

        </RelativeLayout>

        <!-- SECOND DRAWER -->
        <RelativeLayout android:id="@+id/programma_layout_second"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="5" 
            >

            <!-- some stuff here (text, image...) -->

        </RelativeLayout>

        <!-- THIRD DRAWER -->
        <RelativeLayout android:id="@+id/programma_layout_third"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="5" >

                    <!-- some stuff here (text, image...) -->               

        </RelativeLayout>


    </LinearLayout>

    <include android:id="@+id/header" layout="@layout/header"
        android:layout_gravity="top" />


</FrameLayout>

0 个答案:

没有答案