4

在我的应用程序中,我想在背景图像上绘制。我有以下xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg2"
>
    <com.myapp.drawings.DrawingSurface
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/drawingSurface"
    />
    <LinearLayout
            android:orientation="horizontal"
            android:background="@drawable/bg2" 
            android:layout_width="match_parent" 
            android:layout_height="match_parent">
        <Button
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="OK"
                android:onClick="onClick"
                android:id="@+id/colorBlueBtn"
        />
        <Button
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="Save"
                android:onClick="onClick"
                android:id="@+id/saveBtn"
        />
    </LinearLayout>
</FrameLayout>

不,问题是,当我尝试在绘图表面上绘图时,我的绘图没有显示。显示了背景图像和按钮。一旦我保存它,我的应用程序生成的图像文件就会显示出来。我认为问题在于我的布局的 Z 顺序。

有任何想法吗?谢谢你的帮助!:)

4

2 回答 2

8

最先出现在 xml 中的项目将首先被绘制。因此,您的表面视图位于线性布局下方。

于 2011-09-20T07:26:04.143 回答
5

根据Android 开发者对 FrameLayout 的描述

子视图绘制在堆栈中,最近添加的子视图在顶部。

因此,在您的 xml 中,LinearLayout最后绘制,并且由于它具有match_parent属性,它完全隐藏了您的绘图表面。

因此,尝试使用 a RelativeLayout,并将LinearLayout属性设置为 just wrap_content,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg2"
>
    <com.myapp.drawings.DrawingSurface
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/drawingSurface"
    />
    <LinearLayout
            android:orientation="horizontal"
            android:background="@drawable/bg2" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true">
        <Button
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="OK"
                android:onClick="onClick"
                android:id="@+id/colorBlueBtn"
        />
        <Button
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="Save"
                android:onClick="onClick"
                android:id="@+id/saveBtn"
        />
    </LinearLayout>
</RelativeLayout>

您也可以完全省略LinearLayout,而只需将按钮属性设置为保持在底部等。

于 2011-09-20T07:36:10.900 回答