-3

在 Android 应用程序中,我有一个设计有线性布局和图像按钮的纸牌游戏。在完成这个游戏的一个关卡时,我必须做以下列出的事情......

  1. 我必须显示一个类似屏幕的对话框,它应该在屏幕中间弹出。此弹出窗口应包含一些背景图像和按钮。弹出窗口应该从下向上飞。

  2. 显示此弹出窗口时,纸牌游戏父屏幕应模糊。

我在展示 Appflood 的广告时看到了类似的效果。

您能否对此有效地提出一些建议。

父屏幕

在此处输入图像描述

带弹出窗口

在此处输入图像描述

提前致谢..

4

2 回答 2

1

我有一个非常简单的解决方案(我对其进行了测试——效果很好,如我发布的图片所示)。

想象一下,您有一个覆盖整个屏幕(match_parent、match_parent)的不可见(GONE)通用视图,并具有微红色的半透明颜色。
在显示 Dialog 之前它会变为 VISIBLE 并在关闭它后再次 GONE 。

因为它已经消失了,所以你看不到它,它不会浪费任何空间,直到它变得可见。

这种方法要求外部容器是 FrameLayout 或 RelativeLayout(通过正确设置 View:将其锚定到 Parent 的四个角)。
我使用了 RelativeLayout - 因为我真的很喜欢这些容器。

dlg_red_bg.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:padding="8dp"
    >
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@android:color/black"
        android:padding="8dp"
        >
        <Button
            android:id="@+id/btnTopLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:background="@drawable/ball"
            android:text="Btn 1"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnTopRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/btnTopLeft"
            android:background="@drawable/ball"
            android:text="Btn 2"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnBottomLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/btnTopLeft"
            android:layout_alignParentLeft="true"
            android:background="@drawable/ball"
            android:text="Btn 3"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnBottomRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/btnTopRight"
            android:layout_toRightOf="@id/btnBottomLeft"
            android:background="@drawable/ball"
            android:text="Btn 4"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnDialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/ball"
            android:onClick="clickHandler"
            android:text="Dialog"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
    </RelativeLayout>
    <View
        android:id="@+id/vwRedOver"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:background="#8f00"
        android:visibility="gone"
    />
</RelativeLayout>

用于突出背景的代码

public void clickHandler(final View v)
{
    switch(v.getId())
    {
        case R.id.btnDialog:
        {
            vwRedOver.setVisibility(View.VISIBLE);

            final AlertDialog.Builder bld = new AlertDialog.Builder(this);
            bld.setMessage("Some Message")
            .setCancelable(true)
            .setPositiveButton
            (
                "OK",
                new DialogInterface.OnClickListener()
                {
                    @Override
                    public final void onClick
                    (final DialogInterface dlg, final int id)
                    {
                        vwRedOver.setVisibility(View.GONE);
                        dlg.cancel();
                    }
                }
            )
            .setNegativeButton
            (
                "Cancel",
                new DialogInterface.OnClickListener()
                {
                    @Override
                    public final void onClick
                    (final DialogInterface dlg, final int id)
                    {
                        vwRedOver.setVisibility(View.GONE);
                        dlg.cancel();
                    }
                }
            );
            bld.create().show();
        }
    }
}

结果

在点击“对话框”之前

在此处输入图像描述

单击“对话框”后
注 1:由于黑色背景,它很暗
注 2:您会看到黑色边框,因为我在外部 RelativeLayout 上设置了填充 - 您可以将其删除

在此处输入图像描述

单击“确定”或“取消”后 - 返回初始状态(我的对话框在确定时没有做任何有趣的事情 - 仅用于演示目的)

在此处输入图像描述

于 2014-05-16T12:47:10.077 回答
1

试试看:

不要使用AlertDialog,可以使用一种普通布局和一种普通类。如何?

这很容易,你有一个名为“FirstActivity.java”的类,还有一个名为“SecondActivity.java”的第二个类。

第一活动

随心所欲地设计这个课程

第二活动

您将使用 ImageView、Buttons 和 textviews 创建您自己的弹出窗口,并且您将覆盖您的布局背景。

Popup_layout.xml

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

    <ImageView
        android:id="@+id/popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/popup_background" />

    <ImageView
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="39dp"
        android:layout_marginTop="72dp"
        android:onClick="go"
        android:src="@drawable/ok" />

    <TextView
    android:id="@+id/question"
    android:text:"level completed"


</RelativeLayout>

显现

使用自定义主题声明 SecondActivity。

......

 <activity
            android:name="com.example.comandero.SecondActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Overlay" />  
.......

样式.xml

在布局上添加新的背景样式。

<style name="Theme.Overlay" parent="android:style/Theme.Translucent">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>
    </style>

试试看,请说我。如果你不明白的话,说我。

于 2014-05-16T14:18:55.093 回答