Передайте событие касания вниз через Представления и ViewGroup - PullRequest
1 голос
/ 30 июля 2011

У меня есть FrameLayout с ScrollView и LinearLayout внутри. И ScrollView, и LinearLayout имеют одинаковые размеры, поэтому они перекрываются, а LinearLayout покрывает и скрывает ScrollView. ScrollView имеет TextView и кнопку внутри себя.

Это ситуация:

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

Иногда LinearLayout2, который находится вверху, анимируется и исчезает с экрана. По причинам, связанным с макетом, я не могу установить его на УТРО, и это проблема. После завершения анимации отображается ScrollView, и мне нужно взаимодействовать с ScrollView, например, нажимая кнопку и, очевидно, прокручивая, но все события всегда перехватываются LinearLayout 2, потому что для Visibility всегда установлено значение VISIBLE, даже если на самом деле скрывается за экраном.

Итак, как я могу передать событие касания просмотру прокрутки и его дочерним элементам? ``

** РЕДАКТИРОВАТЬ **

Это мой XML. Так что вы можете понять лучше. Какая идея? Этот макет состоит из 4 выдвижных ящиков. Когда пользователь нажимает на одну из них, щелкающий ящик поднимается вверх с анимацией и становится своего рода заголовком, остальные уходят за пределы экрана и прячутся, а вид прокрутки виден готовым к взаимодействию с пользователем.

Например: я щелкаю по второму блоку, третий гаснет, отказ от ответственности, первый вылетает за пределы экрана, а второй, по которому щелкают, переходит в верхнюю часть экрана в качестве заголовка. Если я снова нажму второй блок, который сейчас находится сверху, я восстановлю первоначальный макет, как в начале, всегда с анимацией. Для этого я добавляю Trasparent Layout, который имеет тот же размер, что и ящик, для обработки события щелчка, поэтому я избегаю устанавливать новый макет всякий раз, когда я анимирую ящики.

Что мне нужно, так это взаимодействовать с видом прокрутки, когда он становится видимым, и со всем содержимым внутри него.

ПРОБЛЕМА: Я не могу установить выдвижные ящики, потому что параметр 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...