Управление позиционированием баннера AdMob в iOS через libGDX / RoboVM

Я создал свой проект libGDX для iOS и пытаюсь разместить свои объявления AdMob в центре нижней части экрана, но понятия не имею, как это сделать. Я использую привязки через RoboVM и не знаю никаких методов RoboVM для управления моей рекламой. Я скопировал руководство с здесь. Есть ли у кого-нибудь советы или руководства, которые могут помочь мне это сделать? Сейчас мне кажется, что в рекламе не хватает 1/4 всего баннера, она расположена ближе к правому краю экрана. Ниже мой код:

public class IOSLauncher extends IOSApplication.Delegate implements IActivityRequestHandler{
private static final Logger log = new Logger(IOSLauncher.class.getName(), Application.LOG_DEBUG);
private static final boolean USE_TEST_DEVICES = true;
private GADBannerView adview;
private boolean adsInitialized = false;
private IOSApplication iosApplication;

@Override
protected IOSApplication createApplication() {
    IOSApplicationConfiguration config = new IOSApplicationConfiguration();
    config.orientationLandscape = true;
    config.orientationPortrait = false;

    iosApplication = new IOSApplication(new TestProject(this), config);
    return iosApplication;
}

public static void main(String[] argv) {
    NSAutoreleasePool pool = new NSAutoreleasePool();
    UIApplication.main(argv, null, IOSLauncher.class);
    pool.close();
}

@Override
public void hide() {
    initializeAds();

    final CGSize screenSize = UIScreen.getMainScreen().getBounds().size();
    double screenWidth = screenSize.width();

    final CGSize adSize = adview.getBounds().size();
    double adWidth = adSize.width();
    double adHeight = adSize.height();

    log.debug(String.format("Hidding ad. size[%s, %s]", adWidth, adHeight));

    float bannerWidth = (float) screenWidth;
    float bannerHeight = (float) (bannerWidth / adWidth * adHeight);

    adview.setFrame(new CGRect(0, -bannerHeight, bannerWidth, bannerHeight));
}

@Override
public void show() {
    initializeAds();

    final CGSize screenSize = UIScreen.getMainScreen().getBounds().size();
    double screenWidth = screenSize.width();

    final CGSize adSize = adview.getBounds().size();
    double adWidth = adSize.width();
    double adHeight = adSize.height();

    log.debug(String.format("Showing ad. size[%s, %s]", adWidth, adHeight));

    float bannerWidth = (float) screenWidth;
    float bannerHeight = (float) (bannerWidth / adWidth * adHeight);

    adview.setFrame(new CGRect((screenWidth / 2) - adWidth / 2, 0, bannerWidth, bannerHeight));
}

public void initializeAds() {
    if (!adsInitialized) {
        log.debug("Initalizing ads...");

        adsInitialized = true;

        adview = new GADBannerView(GADAdSize.banner());
        adview.setAdUnitID(Constants.AdUnitID); //put your secret key here
        adview.setRootViewController(iosApplication.getUIViewController());


        iosApplication.getUIViewController().getView().addSubview(adview);

        final GADRequest request = GADRequest.create();

        adview.setDelegate(new GADBannerViewDelegateAdapter() {
            @Override
            public void didReceiveAd(GADBannerView view) {
                super.didReceiveAd(view);
                log.debug("didReceiveAd");
            }

            @Override
            public void didFailToReceiveAd(GADBannerView view,
                    GADRequestError error) {
                super.didFailToReceiveAd(view, error);
                log.debug("didFailToReceiveAd:" + error);
            }
        });

        adview.loadRequest(request);

        log.debug("Initalizing ads complete.");
    }
}

@Override
public void showAds(boolean show) {
    initializeAds();

    final CGSize screenSize = UIScreen.getMainScreen().getBounds().size();
    double screenWidth = screenSize.width();

    final CGSize adSize = adview.getBounds().size();
    double adWidth = adSize.width();
    double adHeight = adSize.height();

    log.debug(String.format("Hidding ad. size[%s, %s]", adWidth, adHeight));

    float bannerWidth = (float) screenWidth;
    float bannerHeight = (float) (bannerWidth / adWidth * adHeight);

    if(show) {
        adview.setFrame(new CGRect((screenWidth / 2) - adWidth / 2, 0, bannerWidth, bannerHeight));
    } else {
        adview.setFrame(new CGRect(0, -bannerHeight, bannerWidth, bannerHeight));
    }

person islander_zero    schedule 19.10.2014    source источник


Ответы (1)


вы устанавливаете позицию объявления с помощью

adview.setFrame(CGRect);

если вы проверите параметры CGRect, это как;

CGRect(double x, double y, double width, double height)

0,0 координаты (x, y) вверху слева. Итак, ваш код;

// center of screen
double adX = (screenWidth / 2) - (adWidth / 2);
// bottom of screen
double adY = screenHeight - bannerHeight;

adview.setFrame(new CGRect(adX, adY, bannerWidth, bannerHeight));

и еще одна важная вещь, вы не должны манипулировать позиционированием двумя способами! ваш метод showAds должен быть таким:

public void showAds(boolean show) {
    if (show) {
        show();
    } else {
        hide();
    }
}
person rcpayan    schedule 23.10.2014
comment
Спасибо ... это отлично работает, но теперь мой метод скрытия не работает. У вас есть работающий метод show (), который работает? - person islander_zero; 23.10.2014
comment
Неважно ... Я понял, я только что сделал это, и он работает ... adview.setFrame (new CGRect (0, -adHeight, adWidth, adHeight)); - person islander_zero; 23.10.2014