我正在向我的应用程序添加一个简单的横幅(使用 openGL ES 2.0 编写的游戏) - 请注意,我没有使用任何 XML,一切都在代码中完成
我试过用谷歌搜索这个并在 SO 上四处寻找,但我根本找不到任何信息 - 我们如何在使用 AdMob 时处理屏幕碎片?
我的应用程序被锁定为横向模式。
例如,我在平板电脑上运行我的应用程序(分辨率为 2560 x 1600),一切看起来都很棒:
然后我在旧的 Galaxy Ace 手机(分辨率为 480 x 320)上运行它,我得到了这个:
显然,由于多种原因,这是错误的(横幅通常太大,太靠近控件,向下延伸到屏幕底部,而我真的希望它只向下延伸到 GLViewPort 的底部(如果这甚至可能的话) - 基本上,我游戏中的每个对象都被缩放,以便它在每个屏幕/DPI 上以相同的相对大小出现,并保持预期的比例。我花了很长时间来确保游戏在每台设备上的外观和感觉都一样!
事实上,横幅在手机上完全没用。我被这个困住了吗?有什么我可以在这里做的吗?我可以把横幅缩小一点吗?有什么办法可以让我自己扩展它吗?基本上,我想我要问的是我对这些横幅有什么真正的控制权吗?
我也查看了 Google 的官方文档,但我觉得它不是很好。AdMob 的帮助也是如此。
我对 AdMob 非常陌生,并且整天都在尝试找出一种方法来做到这一点,任何帮助将不胜感激。
代码:
代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create an ad.
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(AD_UNIT_ID);
// Add the AdView to the view hierarchy. The view will have no size
// until the ad is loaded.
RelativeLayout layout = new RelativeLayout(this);
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(TestDeviceID)
.build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
//Request full screen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//Create a displayMetrics object to get pixel width and height
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.widthPixels;
height = metrics.heightPixels;
//Work out values for resizing screen while keeping aspect ratio
width = (int) Math.min(width, height * 1.702127659574468);
height = (int) Math.min(height, width / 1.702127659574468);
//Create and set GL view (OpenGL View)
myView = new MyGLSurfaceView(MainActivity.this);
RelativeLayout.LayoutParams adParams =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
//Set the colour if we don't, the ad won't show (bug?)
adView.setBackgroundColor(Color.BLACK);
layout.addView(myView);
layout.addView(adView, adParams);
//Create a copy of the Bundle
if (savedInstanceState != null){
newBundle = new Bundle(savedInstanceState);
}
setContentView(layout);
}