gpt4 book ai didi

java - 放置在布局内时如何将 SDLSurfaceView 置于前面?

转载 作者:行者123 更新时间:2023-12-01 12:08:21 24 4
gpt4 key购买 nike

我使用 FrameLayout 来保存两个 View ,一个位于另一个之上。一个是 AdView,另一个是 SDLSurfaceView:https://github.com/kivy/python-for-android/blob/master/src/src/org/renpy/android/SDLSurfaceView.java

基本上,我希望将 AdView 放置在 SDLSurfaceView 前面,但仅在显示实际广告时才放置。启动应用程序后大约 30 秒后广告会加载,但如果我在没有显示广告的情况下点击广告应在的位置,它仍然会打开一个链接。如何将 SDLSurfaceView 保持在 AdView 前面,直到 AdView 实际加载?

这是我迄今为止所拥有的示例:

mView = new SDLSurfaceView(
this,
mPath.getAbsolutePath());
Hardware.view = mView;

//CREATE WIDGETS LAYOUT PARAMETERS
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);

//CREATE ADVIEW
adView = new AdView(this);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
adView.setAdSize(AdSize.BANNER);

//ADD LAYOUT PARAMETER TO ADVIEW
adView.setLayoutParams(lp);

//SET AD LISTENER
adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
adView.bringToFront();
adView.invalidate();
mView.invalidate();
}

@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
adView.getParent().bringChildToFront(mView);
mView.invalidate();
adView.invalidate();
}
});

//CREATE LAYOUT
FrameLayout layout = new FrameLayout(this);
//SET CONTENT TO LAYOUT
setContentView(layout);
//ADD VIEWS TO LAYOUT
layout.addView(adView);
layout.addView(mView);
//BUILD AD REQUEST
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
adView.loadAd(adRequest);

我正在使用 kivy 创建一个 adroid 应用程序,并使用 python-for-android 来打包 apk。该示例是 python-for-android 打包程序使用的 PythonActivity.java 的一部分。

最佳答案

您可以在广告加载时显示广告,并在广告未加载或显示时从布局中删除。在这种情况下,您必须将 adview 放置在 SDLSurfaceView 之上并设置其可见模式:

我会这样做:

mView = new SDLSurfaceView(
this,
mPath.getAbsolutePath());
Hardware.view = mView;

//CREATE WIDGETS LAYOUT PARAMETERS
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);

//CREATE ADVIEW
adView = new AdView(this);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
adView.setAdSize(AdSize.BANNER);
adView.setVisibility(View.GONE);

//ADD LAYOUT PARAMETER TO ADVIEW
adView.setLayoutParams(lp);

//SET AD LISTENER
adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
adView.setVisibility(View.VISIBLE);

}

@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
adView.setVisibility(View.GONE);

}
});

//CREATE LAYOUT
FrameLayout layout = new FrameLayout(this);
//SET CONTENT TO LAYOUT
setContentView(layout);
//ADD VIEWS TO LAYOUT
layout.addView(mView);
layout.addView(adView);
//BUILD AD REQUEST
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
adView.loadAd(adRequest);

关于java - 放置在布局内时如何将 SDLSurfaceView 置于前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com