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
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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With