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
答
我会设置广告视图可视性的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();
});
}
答
最好的办法是,直到你的游戏开始不加载广告。
从您的AdView XML定义中删除ads:loadAdOnCreate="true"
属性。通过这样做,AdView不会自动在onCreate()中加载广告。
AdView adView = (AdView) findViewById(R.id.adView);
adView.loadAd(new AdRequest());
您可以向我们展示R.layout.main xml文件:当你准备好
然后加载在代码中的AdRequest中AdView的? – jmroyalty 2012-07-31 15:07:40
添加了main.xml。我的问题是,我不知道在什么时候设置XML视图的可见性。 – dimetil 2012-07-31 15:56:21