整合Mopub广告到Cocos2dx 2.1 [英] Integrating Mopub ads into Cocos2dx 2.1

查看:563
本文介绍了整合Mopub广告到Cocos2dx 2.1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Mopub集成说明的建议建立在XML中的广告视图这样一个片段:

 < com.mopub.mobileads.MoPubView
的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:ID =@ + ID / AD浏览报
机器人:layout_width =FILL_PARENT
机器人:layout_height =50dp
/>
 

那么说明建议创造活动的创造方法的广告来看是这样的:

  moPubView =(MoPubView)findViewById(R.id.adview);
moPubView.setAdUnitId(123412341234);
moPubView.loadAd();
 

不幸的是 moPubView 未创建,因为Cocos2dx 2.1不使用XML布局了。因此,由于空指针异常应用程序崩溃上推出。

我试图通过 R.layout.main 的setContentView 尝试创建广告视图之前。这并成功创建广告视图但是应用程序的其余部分是不可见的。

我怎样才能创造这样的一个观点上面编程,而无需使用XML?

我觉得这解决了空指针异常问题,而不必调用的setContentView

解决方案

 私有静态BannerAdManager m_adDelegate = NULL;
私有静态FrameLayout.LayoutParams m_bannerParam = NULL;
私有静态的FrameLayout m_appLayout = NULL;


公共静态无效初始化(活动p_activity)
{
    //创建委托实例
    如果(m_adDelegate == NULL)
    {
        m_adDelegate =新BannerAdManager();
    }

    m_activity = p_activity;


    // ~~~设置mopub横幅广告
    // ~~~创建mopub广告视图
    m_mopubView =新MoPubView(m_activity);

    m_bannerParam =新FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.WRAP_CONTENT,
                        FrameLayout.LayoutParams.WRAP_CONTENT
                    );

    m_mopubView.setAdUnitId(Config_Android._ID);
    m_mopubView.setBannerAdListener(m_adDelegate);
    m_mopubView.loadAd();

    //获取当前布局
    m_appLayout =(的FrameLayout)m_activity.findViewById(android.R.id.content);

    //设置默认对齐
    m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;

    //添加mopub以布局
    m_appLayout.addView(m_mopubView,m_bannerParam);

}

    公共静态无效setBannerPositionTopWithPadding(浮点p_padding)
    {
        getActivity()。runOnUiThread(新的Runnable()
        {
            公共无效的run()
            {
                活性= getActivity();

                m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;
                m_bannerParam.width = FrameLayout.LayoutParams.WRAP_CONTENT;
                m_bannerParam.height = FrameLayout.LayoutParams.WRAP_CONTENT;

                m_bannerParam.topMargin =(INT)p_padding;

                m_appLayout.updateViewLayout(m_mopubView,m_bannerParam);
                m_mopubView.refreshDrawableState();

            }
        });
    }
 

The Mopub integration instructions suggest creating the ad view in xml with a snippet like this:

<com.mopub.mobileads.MoPubView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adview"
android:layout_width="fill_parent"
android:layout_height="50dp"
/> 

Then the instructions suggest creating the ad view in the activity's create method like this:

moPubView = (MoPubView)findViewById(R.id.adview);
moPubView.setAdUnitId("123412341234");
moPubView.loadAd();

Unfortunately moPubView is not created because Cocos2dx 2.1 doesn't use XML for layout anymore. So the app crashes on launch due to a null pointer exception.

I tried passing R.layout.main to setContentView before attempting to create the ad view. This does successfully create the ad view however the rest of the app isn't visible.

How can I create a view like the one above programmatically without using XML?

I think this solve the null pointer exception issue without having to call setContentView.

解决方案

private static BannerAdManager m_adDelegate = null;
private static FrameLayout.LayoutParams m_bannerParam = null;
private static FrameLayout m_appLayout = null;


public static void initialize(Activity p_activity)
{
    // create instance of delegate
    if( m_adDelegate == null )
    {
        m_adDelegate = new BannerAdManager();
    }

    m_activity = p_activity;


    //~~~setup mopub banner ad
    //~~~create mopub ad view
    m_mopubView = new MoPubView(m_activity);

    m_bannerParam = new FrameLayout.LayoutParams(   
                        FrameLayout.LayoutParams.WRAP_CONTENT,
                        FrameLayout.LayoutParams.WRAP_CONTENT
                    );

    m_mopubView.setAdUnitId(Config_Android._ID);
    m_mopubView.setBannerAdListener(m_adDelegate);
    m_mopubView.loadAd();

    //get current layout
    m_appLayout = (FrameLayout) m_activity.findViewById(android.R.id.content);

    // set default alignment
    m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;

    //add mopub view to layout
    m_appLayout.addView(m_mopubView, m_bannerParam);

}

    public static void setBannerPositionTopWithPadding(float p_padding)
    {
        getActivity().runOnUiThread(new Runnable() 
        {
            public void run()
            {
                activity = getActivity();

                m_bannerParam.gravity  = Gravity.TOP | Gravity.CENTER;
                m_bannerParam.width    = FrameLayout.LayoutParams.WRAP_CONTENT;
                m_bannerParam.height   = FrameLayout.LayoutParams.WRAP_CONTENT;

                m_bannerParam.topMargin = (int) p_padding;

                m_appLayout.updateViewLayout(m_mopubView, m_bannerParam);
                m_mopubView.refreshDrawableState();

            }
        });
    }

这篇关于整合Mopub广告到Cocos2dx 2.1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆