2011-01-07 1 views
10

Я пытаюсь создать SlidingDrawer с содержимым LinearLayout через FrameLayout.Android: SlidingDrawer исчезает под SurfaceView

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

Что, по-видимому, вызывает тот факт, что у меня есть SurfaceView в XML-файле перед SlidingDrawer.
Удаление представления из xml решает эту проблему, однако мне нужно это представление.

Вот XML:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Removing this DrawView from here solves the problem --> 
    <com.package.DrawView 
     android:id="@+id/main" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

    <SlidingDrawer 
     android:id="@+id/SlidingDrawer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:allowSingleTap="true" 
     android:animateOnClick="true" 
     android:handle="@+id/slideHandleButton" 
     android:content="@+id/contentLayout" 
     android:padding="10dip"> 

     <Button 
      android:id="@+id/slideHandleButton" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/sliding_button"> 
     </Button> 

     <LinearLayout 
      android:id="@+id/contentLayout" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <Button 
       android:id="@+id/clearButton" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Test"> 
      </Button> 

     </LinearLayout> 

    </SlidingDrawer> 

</FrameLayout> 

Java:

package com.package; 

import android.app.Activity; 
import android.os.Bundle; 

public class SlideTest extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 
    } 
} 

package com.package; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.SurfaceView; 

public class DrawView extends SurfaceView 
{ 
    public DrawView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
} 

Edit: Я просто заметил, что если DrawView распространяется View и не SurfaceView эта проблема уходит. Тем не менее, я использую выделенный поток чертежей и согласно документации (и примеру LunarLander) при использовании выделенного потока чертежей, он должен рисовать SurfaceView.

Любая помощь была бы принята с благодарностью!

ответ

14

андроид: фон = "# 00000000"

цвет фона была проблема.

+0

Привет, это сработало! – ykrasik

+0

Некоторые пояснения: установите этот атрибут xml в элементе SlidingDrawer. – SilithCrowe

+1

Я не думаю, что это фактически решает проблему. Область, в которой ящик * был бы *, становится черным, а «SurfaceView» не отображается в этом регионе, даже когда ящик закрыт. У меня по-прежнему возникает проблема, когда фон обрезается местоположением, которое дескриптор занял бы, если бы ящик был открыт. –

3

SurfaceView работает, разрезая «отверстие» через окно, чтобы отобразить другую поверхность (тот, на который вы втягиваете.) Это то, что вызывает обрезку выдвижного ящика SlidingDrawer. Мне жаль, что вы не сможете использовать оба взгляда вместе.

+0

Спасибо за ваш ответ! Позор, хотя ... – ykrasik

+2

Я заметил, что у них в основном есть эта функция в приложении HTC std. Означает ли это, что они делают рендеринг SlidingDrawer непосредственно в SurfaceView или все они делают это вручную с помощью OpenGL? – Weston

+1

Добавление цвета фона позволило ему работать на всех устройствах, которые я пробовал. До этого он работал с некоторыми устройствами, а не с другими. – Louth