繁体   English   中英

合成Android MapView和SurfaceView

[英]Compositing Android MapView and SurfaceView

我有一个带有SurfaceView和MapView的应用程序。 它们显示在单个视图中,如下所示:

<?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在其窗口上打一个孔,以显示其表面。 视图层次结构将负责与Surface正确组合,通常会出现在其顶部的SurfaceView的任何同级对象。

对我来说,这意味着我应该能够将SurfaceView首先放在文件中,并使它“穿通” MapView并显示其内容。 但是,实际上,它们似乎是两个视图,一次只能看到一个视图。

经过思考:我尝试将背景设置为#00000000,以使背景的Alpha为零(即透明),但是它没有任何作用。

在这种情况下,仅Alpha设置并不会真正有帮助。

设置视图时,请设置视图的SurfaceHolder的PixelFormat:

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

我最终放弃了SurfaceView,尽管它具有平滑绘制的出色功能。 现在,我仅使用常规的旧View,覆盖其onDraw方法。 每次绘制此新View时,都会刷新下面的MapView,但是我正在考虑使用View的图形缓存功能来简化此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM