Andengine - 从启动画面中删除广告

问题描述:

问题是XML视图(广告)出现在游戏数据加载时(约5-6秒)。 如何从splashscreen中删除广告?Andengine - 从启动画面中删除广告

将视图添加到布局。 XML视图 - 隐形

@Override 
protected void onSetContentView() { 
    relativeLayout = new RelativeLayout(this); 
    final FrameLayout.LayoutParams relativeLayoutLayoutParams = 
      new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
      FrameLayout.LayoutParams.MATCH_PARENT); 

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

    final LayoutParams surfaceViewLayoutParams = new RelativeLayout.LayoutParams(
      super.createSurfaceViewLayoutParams()); 
    surfaceViewLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); 

    // XML-view above AndEngine view 
    LayoutInflater vi = (LayoutInflater) getSystemService(
      Context.LAYOUT_INFLATER_SERVICE); 
    vv = vi.inflate(R.layout.main, null); 
    vv.bringToFront(); 
    // set XML-view visible! 
    vv.setVisibility(View.GONE); 

    // add views to the layout 
    // AndEngine view 
    relativeLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams); 

    // XML view 
    relativeLayout.addView(vv, createAdViewLayoutParams()); 
    setContentView(relativeLayout, relativeLayoutLayoutParams); 
} 

加载启动画面资源和场景

@Override 
public void onCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback) throws Exception { 

    splashBackgroundTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 480, 800, TextureOptions.NEAREST); 
    splashBackgroundTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashBackgroundTextureAtlas, this, "gfx/splash.png", 0, 0); 
    mEngine.getTextureManager().loadTexture(splashBackgroundTextureAtlas); 

    pOnCreateResourcesCallback.onCreateResourcesFinished(); 
} 


@Override 
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws Exception { 
    splashScene = new Scene(); 
    splashScene.setBackgroundEnabled(false); 
    splashScene.attachChild(new Sprite(0, 0, splashBackgroundTextureRegion, this.getVertexBufferObjectManager())); 
    pOnCreateSceneCallback.onCreateSceneFinished(splashScene); 
} 

加载游戏资源和场景

@Override 
public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { 
    mEngine.registerUpdateHandler(new TimerHandler(0.01f, new ITimerCallback() { 
      public void onTimePassed(final TimerHandler pTimerHandler) { 
        mEngine.unregisterUpdateHandler(pTimerHandler); 
        loadResources(); 
        loadScene(); 

        mEngine.setScene(scene); 
       } 
      })); 

    pOnPopulateSceneCallback.onPopulateSceneFinished(); 

    // set XML-view visible!     
    runOnUiThread(new Runnable() { 
     public void run() { 
      vv.setVisibility(View.VISIBLE); 
     } 
    }); 
} 

public void loadResources() { 
    // game resources 
    try { 
     ITexture backgroundTexture = new BitmapTexture(
       this.getTextureManager(), new IInputStreamOpener() { 
        @Override 
        public InputStream open() throws IOException { 
         return getAssets().open("gfx/bg01.jpg"); 
        } 
       }); 
     backgroundTexture.load(); 
     mBackgroundTextureRegion = TextureRegionFactory.extractFromTexture(backgroundTexture); 

    } catch (IOException e) { 
    } 
} 

public void loadScene() { 
    scene = new Scene(); 
    scene.setTouchAreaBindingOnActionDownEnabled(true); 

    // add background to scene 
    Sprite backgroundSprite = new Sprite(0, 0, this.mBackgroundTextureRegion, getVertexBufferObjectManager()); 
    scene.attachChild(backgroundSprite); 

    // add sprite to scene 
    pandaSprite = new Panda(false, TextureControlManager.createTiledTextureRegionFromAsset(
      getTextureManager(), this, Panda.ANIMATION_FILES), 
      getVertexBufferObjectManager()); 
    scene.attachChild(pandaSprite); 

    scene.attachChild(pandaSprite); 
    scene.registerTouchArea(pandaSprite);  
} 

编辑: 布局的main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/footer_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:gravity="bottom" 
    android:orientation="vertical" > 

<com.google.ads.AdView 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:id="@+id/adView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    ads:adSize="BANNER" 
    ads:adUnitId="@string/admob_id" 
    ads:loadAdOnCreate="true" /> 

</LinearLayout> 

堆栈跟踪:

07-31 19:38:27.531: D/AndEngine(4960): MainActivity.onSurfaceCreated @(Thread: 'GLThread 27') 
07-31 19:38:27.531: D/AndEngine(4960): MainActivity.onCreateGame @(Thread: 'GLThread 27') 
07-31 19:38:27.531: D/AndEngine(4960): MainActivity.onCreateResources @(Thread: 'GLThread 27') 
07-31 19:38:27.541: D/AndEngine(4960): MainActivity.onCreateScene @(Thread: 'GLThread 27') 
07-31 19:38:27.551: D/AndEngine(4960): MainActivity.onPopulateScene @(Thread: 'GLThread 27') 
07-31 19:38:27.551: D/AndEngine(4960): MainActivity.onGameCreated @(Thread: 'GLThread 27') 
07-31 19:38:27.551: D/AndEngine(4960): MainActivity.onSurfaceChanged(Width=320, Height=480) @(Thread: 'GLThread 27') 
07-31 19:38:27.551: D/AndEngine(4960): MainActivity.onResumeGame @(Thread: 'main') 
07-31 19:38:28.052: D/dalvikvm(4960): GC_FOR_MALLOC freed 127K, 54% free 3307K/7175K, external 20K/512K, paused 39ms 
07-31 19:38:28.062: I/dalvikvm-heap(4960): Grow heap (frag case) to 6.978MB for 1536016-byte allocation 
07-31 19:38:28.152: D/dalvikvm(4960): GC_FOR_MALLOC freed 7K, 45% free 4799K/8711K, external 20K/512K, paused 63ms 
07-31 19:38:28.312: D/dalvikvm(4960): GC_CONCURRENT freed <1K, 45% free 4799K/8711K, external 20K/512K, paused 5ms+8ms 
07-31 19:38:28.472: D/dalvikvm(4960): GC_EXPLICIT freed 1502K, 63% free 3299K/8711K, external 20K/512K, paused 54ms 
07-31 19:38:29.173: D/dalvikvm(4960): GC_CONCURRENT freed 200K, 60% free 3526K/8711K, external 40K/512K, paused 4ms+5ms 
07-31 19:38:29.403: D/dalvikvm(4960): GC_CONCURRENT freed 477K, 60% free 3519K/8711K, external 40K/512K, paused 4ms+31ms 
+0

您可以向我们展示R.layout.main xml文件:当你准备好

然后加载在代码中的AdRequest中AdView的? – jmroyalty 2012-07-31 15:07:40

+0

添加了main.xml。我的问题是,我不知道在什么时候设置XML视图的可见性。 – dimetil 2012-07-31 15:56:21

我会设置广告视图可视性的XML文件中的“水涨船高”,那么你改变的代码mEngine.setScene(scene); onTimePassed在你的场景之后再更改知名度,“可见”

像这样

@Override 
public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { 
mEngine.registerUpdateHandler(new TimerHandler(0.01f, new ITimerCallback() { 
     public void onTimePassed(final TimerHandler pTimerHandler) { 
       mEngine.unregisterUpdateHandler(pTimerHandler); 
       loadResources(); 
       loadScene(); 

       mEngine.setScene(scene); 

       // set XML-view visible here!     
       runOnUiThread(new Runnable() { 
        public void run() { 
         vv.setVisibility(View.VISIBLE); 
        } 
       }); 
     }); 

     pOnPopulateSceneCallback.onPopulateSceneFinished(); 

    }); 
} 
+0

我已经试过了。没有结果。广告视图在加载完成前出现。我添加了stacktrace。你可以看到。 – dimetil 2012-07-31 16:51:40

+0

我试过了。 当显示启动画面时,vv.setVisibility(View.VISIBLE)被执行 – dimetil 2012-07-31 18:08:39

最好的办法是,直到你的游戏开始不加载广告。

从您的AdView XML定义中删除ads:loadAdOnCreate="true"属性。通过这样做,AdView不会自动在onCreate()中加载广告。

AdView adView = (AdView) findViewById(R.id.adView); 
adView.loadAd(new AdRequest()); 
+0

但是这也是一个事实,我不知道在什么时候应该包括Ad!当我准备好了吗? onPopulateScene在下载整个场景 – dimetil 2012-07-31 19:11:10

+0

+1之前调用,因为我认为这比我的回答更好 - 您可以在同一位置加载广告,我建议您更改可见性。 – jmroyalty 2012-07-31 21:31:32