【问题标题】:How to hide an Ad?如何隐藏广告?
【发布时间】:2014-04-04 13:27:46
【问题描述】:

您好,我使用下面的代码在我的游戏中显示广告并且效果很好,但我在 GameActivity.java 中创建了这个横幅 (setContentView())。我有gameScene.java。我有时想隐藏这个横幅。那么如何从 gameScene.java 访问“adView”变量(位于 GameActivity.java 中)?

我有一个活动 GameActivity.java 和其他场景(gameScene、menuScene...)。 我想在我的菜单场景中显示横幅,但我也想在游戏场景中隐藏它。

      @Override
    @SuppressLint("NewApi")
    protected void onSetContentView() {

            super.onSetContentView();
            final FrameLayout frameLayout = new FrameLayout(this);
            final FrameLayout.LayoutParams frameLayoutLayoutParams = new FrameLayout.LayoutParams(
                            FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.FILL);
            final FrameLayout.LayoutParams adViewLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                            FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP);

            adView = new AdView(this);
            adView.setAdUnitId("XXXXXXXXXXXXXX");
            adView.setAdSize(AdSize.BANNER);
            adView.setVisibility(AdView.VISIBLE);
            adView.refreshDrawableState();

            AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
            adView.loadAd(adRequest);

            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
                    adView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }


            this.mRenderSurfaceView = new RenderSurfaceView(this);
            mRenderSurfaceView.setRenderer(mEngine, this);



            final FrameLayout.LayoutParams surfaceViewLayoutParams = new FrameLayout.LayoutParams(
                            android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT);
            surfaceViewLayoutParams.gravity = Gravity.CENTER;

            frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
            frameLayout.addView(adView, adViewLayoutParams);
            this.setContentView(frameLayout, frameLayoutLayoutParams);

    }

【问题讨论】:

  • 您没有为我们提供足够的信息来回答这个问题。什么是GameScene、BaseScene?它们是如何创建的?为什么找不到 adView?
  • GameScene 是我的场景,用户在其中玩杀怪等 BaseScene 只是一个类,我所有的场景都在那里扩展,你可以找到一些方法,它们在所有场景中,例如 onBackKeyPressed() , createScene() , disposeScene() , onResume() 等。我找不到 adView,因为变量是在另一个 .java 文件 GameActivity 中创建的,它在 GameScene.java 中不可见,因为它在其他包中,我刚刚创建和实例再次获取变量和异常

标签: android admob andengine


【解决方案1】:

如果你想隐藏它,只需调用adView.setVisiblity(View.GONE)。如果您想再次显示,请致电adView.setVisiblity(View.VISIBLE)

【讨论】:

  • 如何从游戏场景中获取“adView”变量?
  • 什么是gameScene?一个片段?
  • 不,它只是我游戏的一个场景,GameScene.java 扩展了 BaseScene
  • 你可以在GameScene中定义一个接口,由你的Activity实现。创建对象 GameScene 时,传递接口的引用,然后在需要时调用该接口方法(在活动中定义),隐藏横幅
  • 我在 GameActivity 中创建了一个实例,在我的 GameScene 中我使用 GameActivity.getInstance().adView.setVisibility(View.Gone);它会导致错误。我无法创建界面,因为游戏场景必须是抽象的,这也会导致错误
【解决方案2】:

按照亚历山德罗的建议去做。

将 Activity 的引用传递给 GameScene 并使用该引用调用 findViewById 以获取 AdView。

【讨论】:

    【解决方案3】:

    SkinWalker,我在 AndEngine 论坛上阅读了您的帖子,在这里,我遇到了同样的问题,但 Androidacct 为我解决了这个问题。阅读这篇文章:Hide/Show AdView from Scene

    希望对你有帮助!

    编辑:

    这就是它对我的帮助: 在您的 BaseGameActivity 中添加以下代码:

    public void showAds() {
                this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                                adView.setVisibility(View.VISIBLE);
                                AdRequest adRequest = new AdRequest.Builder().addTestDevice(
                                                AdRequest.DEVICE_ID_EMULATOR).build();
                                adView.loadAd(adRequest);
                        }
                });
        }
    
        public void hideAds() {
                this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                                adView.setVisibility(View.INVISIBLE);
                        }
                });
        }
    

    您必须使用以下代码从场景中调用它:

    ResourcesManager.getInstance().activity.hideAds();
    

    我建议您阅读本教程:Full game tutorial - part 3. Resources Manager

    最好的问候!

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多