glsurfaceview внутри прокрутки, перемещение, но не отсечение - PullRequest
2 голосов
/ 27 февраля 2011

У меня есть прокрутка с линейным расположением внутри. Одним из элементов этого линейного макета является glsurfaceview.

Это все работает правильно, и когда я прокручиваю, glsurfaceview перемещается вверх и вниз, однако, когда glsurfaceview достигает вершины или низа того места, где он должен быть из прокрутки, где оно должно быть вырезано, это не так и продолжается за пределами прокрутки. Этот скриншот должен прояснить это:

glsurfaceview not clipped correctly

Не думаю, что это совершенно необходимо, но вот мой layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"
android:padding="6dip"
>
<ScrollView
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
>
    <LinearLayout
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"
    >
        <LinearLayout
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        >
            <LinearLayout
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:orientation="vertical"
            android:layout_weight="1"
            >
            <!-- LOTS OF SEEKBARS/TEXTVIEWS -->
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content" 
                android:layout_weight="1.4"
                android:layout_marginRight="10dip"
                android:layout_marginLeft="10dip"
                android:orientation="horizontal" >
                <android.opengl.GLSurfaceView android:id="@+id/glview"  
                android:layout_width="100px"
                android:layout_height="250px"/>
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
        android:layout_marginTop="6dip"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:orientation="horizontal" >
            <!-- OK/CANCEL BUTTONS -->
        </LinearLayout>
    </LinearLayout>
</ScrollView>
</LinearLayout>

Вся помощь высоко ценится:)

Ответы [ 2 ]

4 голосов
/ 28 февраля 2011

Размещение SurfaceView внутри ScrollView (или ListView и т. Д.) В настоящее время не поддерживается.

0 голосов
/ 08 июля 2019

Речь идет не о поддержке, как было сказано выше.Причина проблемы в том, что GLSurfaceView не на уровне просмотра.Вкратце: для вашего случая у вас есть GLSurfaceView на первом уровне, затем другие виды с holes в представлениях выше GLSurfaceView (это обрабатывается менеджером окон, и это не имеет значения, куда вы положили GLSurfaceViewxml, в любом случае он будет на первом уровне, а другие - на следующем уровне)

Итак, вам нужно принудительно обновить представление, и есть обходной путь: вы должны поставить прокрутку с помощью GLSurfaceView или (RecyclerView с GLSurfaceViews) "между" двумя FrameLayouts.как то так:

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

     <ScrollView
        android:fillViewport="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       ---- here should be linear layout with your glView, or RecyclerView instead if required ----
     </ScrollView>

   --- this frame also required: ---
   <FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@android:color/transparent" />

</FrameLayout>
...