Java 在画布上显示广告

Java 在画布上显示广告,java,android,canvas,admob,Java,Android,Canvas,Admob,现在我这样称呼我的游戏画布: GameCanvas gameCanvas; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gameCanvas = new GameCanvas(getApplicationContext()); gameCanvas.setBackgroundColor(Color.DKGRAY);

现在我这样称呼我的游戏画布:

GameCanvas gameCanvas;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    gameCanvas = new GameCanvas(getApplicationContext());
    gameCanvas.setBackgroundColor(Color.DKGRAY);
    setContentView(gameCanvas);
}
在main.xml中,我得到了

`<com.google.android.gms.ads.AdView android:id="@+id/adView"
                                       android:layout_width="wrap_content"
                                       android:layout_height="wrap_content"
                                       ads:adUnitId="ca-app-pub-ID"
                                       ads:adSize="BANNER"/>`
那么,如何在画布上添加admob横幅广告呢

编辑:

如果我加上

<mb.jet.game.GameCanvas android:id="@+id/vMain"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content" />

对于我的xml,我得到了错误


无法启动活动组件信息{mb.jet.game/mb.jet.game.MyActivity}:android.view.InflateException:Binary XML文件行#12:错误:对类mb.jet.game.GameCanvas进行充气

,下面是我要做的。将游戏画布放入一个片段中。通过框架布局将片段动态添加到活动中。将框架布局置于相对位置。将Admob xml内容也放在relativelayout中。这一切都变得很简单,因为你可以相对于你的广告定位你的游戏画布。我假设你的游戏画布是一个GLSurfaceView(可能是错误的)?不管是什么情况,都可以使用xml创建视图

完成所有操作后,将以下属性添加到admob xml引用中

android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
添加到框架布局中

android:layout_above ="@+id/adView"

您也可以使用addContentView将视图添加到布局中,但如果您要求我,最好使用片段

我最终将所有内容都做成了一个相对的布局,这样我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hello World, MyActivity"
            />
    <RelativeLayout android:id="@+id/vMain"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" />
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:ads="http://schemas.android.com/apk/res-auto"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        <com.google.android.gms.ads.AdView android:id="@+id/adView"
                                           android:layout_width="wrap_content"
                                           android:layout_height="wrap_content"
                                           android:layout_alignParentBottom="true"
                                           android:layout_centerInParent="true"
                                           ads:adUnitId="ca-app-pub-2945740687682775/6253169713"
                                           ads:adSize="BANNER"/>
    </RelativeLayout>
</RelativeLayout>

我不确定这是否是最好的解决方案,也不确定这是否是其他人发布的内容,我只是误解了,所以我将暂时保留这个问题。

这可能是一个愚蠢的问题,但我该如何将我的游戏画布放到一个片段中?只是扩展片段而不是视图?我的游戏画布只是一个普通的画布:)扩展片段,在oncreateview中返回您将使用的实际视图。在活动中,使用setcontentview为活动设置框架布局,因为片段可以轻松地动态添加到框架布局中。一旦你这样做了,你就开始行动了。请投票,如果这有助于你。。。谢谢如果我在我的gamecanvas类中扩展fragment而不是view,很多东西都会被破坏,比如getWidth或getContext,我真的非常需要它们,有没有办法解决这个问题?@Nujke,你可以不用XML以编程的方式做任何事情。如果不希望这样,请定义一个框架布局,首先放置画布,然后放置adview。谢谢,如果你能扩展碎片。。。您可以使用getActivity()来代替getContext,后者返回上下文。我对canvas了解不够,但如果canvas类似于surfaceview或glsurfaceview,那么应该有一些方法可以替代,以获得曲面的高度和宽度,从而获得正确的纵横比。我知道,如果您使用片段动态地将其添加到布局中,那么获取高度和宽度应该不会有问题,因为片段与您的活动密切相关。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hello World, MyActivity"
            />
    <RelativeLayout android:id="@+id/vMain"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" />
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:ads="http://schemas.android.com/apk/res-auto"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
        <com.google.android.gms.ads.AdView android:id="@+id/adView"
                                           android:layout_width="wrap_content"
                                           android:layout_height="wrap_content"
                                           android:layout_alignParentBottom="true"
                                           android:layout_centerInParent="true"
                                           ads:adUnitId="ca-app-pub-2945740687682775/6253169713"
                                           ads:adSize="BANNER"/>
    </RelativeLayout>
</RelativeLayout>
setContentView(R.layout.main);

    RelativeLayout layout = (RelativeLayout)findViewById(R.id.vMain);
    layout.addView(gameCanvas);
    AdView adView = (AdView) this.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().addTestDevice("91BA1C88FB7946232E39E67D0C066208").build();
    adView.loadAd(adRequest);