问题在于XML视图(广告)会在游戏数据加载时(大约5-6秒)出现.
如何从启动画面中删除广告?
将视图添加到布局. XML视图-不可见
@Overrideprotected 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);}
加载启动画面资源和场景
@Overridepublic 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();}@Overridepublic void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws Exception { splashScene = new Scene(); splashScene.setBackgroundEnabled(false); splashScene.attachChild(new Sprite(0, 0, splashBackgroundTextureRegion, this.getVertexBufferObjectManager())); pOnCreateSceneCallback.onCreateSceneFinished(splashScene);}
加载游戏资源和场景
@Overridepublic 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 39ms07-31 19:38:28.062: I/dalvikvm-heap(4960): Grow heap (frag case) to 6.978MB for 1536016-byte allocation07-31 19:38:28.152: D/dalvikvm(4960): GC_FOR_MALLOC freed 7K, 45% free 4799K/8711K, external 20K/512K, paused 63ms07-31 19:38:28.312: D/dalvikvm(4960): GC_CONCURRENT freed <1K, 45% free 4799K/8711K, external 20K/512K, paused 5ms 8ms07-31 19:38:28.472: D/dalvikvm(4960): GC_EXPLICIT freed 1502K, 63% free 3299K/8711K, external 20K/512K, paused 54ms07-31 19:38:29.173: D/dalvikvm(4960): GC_CONCURRENT freed 200K, 60% free 3526K/8711K, external 40K/512K, paused 4ms 5ms07-31 19:38:29.403: D/dalvikvm(4960): GC_CONCURRENT freed 477K, 60% free 3519K/8711K, external 40K/512K, paused 4ms 31ms
解决方法:
最好的选择是在游戏开始之前不要加载广告.
从AdView XML定义中删除ads:loadAdOnCreate =“ true”属性.这样,AdView不会自动在onCreate()中加载广告.
准备就绪后,然后在代码中加载带有AdRequest的AdView:
AdView adView = (AdView) findViewById(R.id.adView);adView.loadAd(new AdRequest());
来源:https://www.icode9.com/content-4-581051.html
联系客服