2010-10-13 4 views
0

У меня есть приложение с SurfaceView и MapView. Они отображаются в одном виде, например:Композиция Android MapView и SurfaceView

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

    <com.google.android.maps.MapView 
     android:id="@+id/mapview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:apiKey="XXXXXXXXredactedXXXXXXXXXXXXx" 
    /> 

<class.that.extends.SurfaceView 
    android:id="@+id/surfaceview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#00000000" 
    /> 

</RelativeLayout> 

Обратите внимание, что MapView поставляется перед SurfaceView. Из-за этого MapView рисуется «под» SurfaceView, и все, что я вижу, - это черный фон, с тем, что я рисую на SurfaceView. Если я поменяю порядок и сначала поместите SurfaceView в файл, а MapView - второй, MapView будет нарисован, и ни один из SurfaceView не покажет.

Согласно SurfaceView Javadoc:

Поверхность Z упорядочены таким образом, что за окном держа его SurfaceView; SurfaceView пробивает отверстие в своем окне, чтобы его поверхность отображалась. Иерархия представлений позаботится о правильной компоновке с Поверхностью любых братьев и сестер SurfaceView, которые обычно появляются поверх нее.

Для меня это означает, что я должен иметь возможность перенести SurfaceView в первую очередь в файл и пропустить «MapView» и показать, что у него есть. Но, как бы то ни было, они кажутся двумя видами, и только один из них виден одновременно.

После размышления: Я попытался установить фон на # 00000000 так, чтобы альфа фона была нулевой (то есть прозрачной), но она не имеет никакого эффекта.

ответ

0

Я в конечном итоге отказаться от SurfaceView, несмотря на это прекрасные возможности для рисования плавно. Теперь я просто использую обычный старый вид, переопределяя его метод onDraw. В настоящее время MapView обновляется каждый раз, когда этот новый вид нарисован, но я ищу использование функции кеша чертежа Views для упрощения этого.

0

Настройка альфа сама по себе в действительности не поможет.

При настройке ваши взгляды, установить PixelFormat из SurfaceHolder отображения вида:

glsView = (GLSurfaceView) findViewById(R.id.surfaceview); 
    glsView.getHolder().setFormat(PixelFormat.TRANSLUCENT);