【问题标题】:AdView not Showing (Possibly Hidden Behind Other View)AdView 未显示(可能隐藏在其他视图后面)
【发布时间】:2016-06-29 20:12:30
【问题描述】:

我有以下MainActivity xml 文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    xmlns:ads="http://schemas.android.com/apk/res-auto"

    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.retrochicken.slide.MainActivity">

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="bottom|start"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>

</FrameLayout>

然后在MainActivityjava类中OnCreate方法

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        FrameLayout mainLayout = (FrameLayout) findViewById(R.id.mainLayout);
        mainLayout.addView(new GamePanel(this));

        MobileAds.initialize(getApplicationContext(), "ca-app-pub-3940256099942544~3347511713");

        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

        mAdView.bringToFront();
    }

我正在尝试让我的GamePanel 类,即SurfaceView,在整个屏幕上绘制一个画布,但在屏幕底部显示一个广告横幅。目前我没有看到广告发生任何事情,可能是其他问题,但我猜它显示在 GamePanel 所绘制的内容后面。

编辑
我已经确认这是在 AdView 上绘制 GamePanel 的问题,我相信这可能是我处理绘制方法的方式。在GamePanel 我有一个方法draw(Canvas canvas) 将所有游戏对象绘制到画布上,然后我使用

将画布发布到屏幕上
try {
                canvas = this.surfaceHolder.lockCanvas();
                synchronized (surfaceHolder) {
                    this.gamePanel.update(timeMillis);
                    this.gamePanel.draw(canvas);
                }
            } catch(Exception e) {

            } finally {
                if(canvas != null) {
                    try {
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    } catch(Exception e) {e.printStackTrace();}
                }
            }

它包含在一个循环中,该循环重复(在另一个线程中)控制游戏的帧。

【问题讨论】:

    标签: java android layout admob android-framelayout


    【解决方案1】:

    根据here的信息,或许你可以试试

    mAdView.setWillNotDraw(false);
    

    【讨论】:

    • 它看起来不起作用,但是我现在认为这是我如何绘制画布而不是分层的问题。
    • @wfish454Tutorials 更新了答案,尝试了一些新的东西
    【解决方案2】:

    FrameLayout 的功能是一次显示一个视图并阻止其他更多细节 https://developer.android.com/reference/android/widget/FrameLayout.html

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      相关资源
      最近更新 更多