Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Andengine - remove Ads from the splashscreen

The problem is that XML-view (Ads) appears at the time of game data loading (about 5-6 sec). How can I remove Ads from the splashscreen?

Adding views to layout. XML-view - invisible

@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);
}

Loading splashscreen resources and scene

@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);
}

Loading game resources and scene

@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);       
}

EDIT: Layout 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>

Stacktrace:

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 
like image 753
dimetil Avatar asked Feb 02 '26 15:02

dimetil


1 Answers

Your best bet is to not load an ad until your game starts.

Remove the ads:loadAdOnCreate="true" attribute from your AdView XML definition. By doing this, the AdView will not automatically load an ad in onCreate().

Then load the AdView with an AdRequest in code when you're ready:

AdView adView = (AdView) findViewById(R.id.adView);
adView.loadAd(new AdRequest());
like image 179
Eric Leichtenschlag Avatar answered Feb 04 '26 05:02

Eric Leichtenschlag



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!