嗨,我正在开发一个android应用程序,使用adwhirl来显示我的广告。我想能够处理adwhirl不返回广告时的情况。当失败时,我想显示一个装饰条。
有人能给我举个例子吗?
提前谢谢你,

最佳答案

好吧,我已经想好了。有两种可能的方法,一种非常简单,另一种需要更多的工作。
简单的方法
adwhirl布局保持不可见,只要它没有显示。因此,您只需创建一个FrameLayout,其中包含后台的回退视图和前面的adwhirl视图,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="53dp"
        android:layout_gravity="center_horizontal"
        >
    <!-- fallback view -->
    <TextView
        android:id="@+id/ad_fallback"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text="nothing to say..."
        >
</FrameLayout>

在代码中,您可以将视图添加到布局中(其中parentView是上面显示的膨胀布局):
final DisplayMetrics dm = activity.getResources().getDisplayMetrics();
final AdWhirlLayout adView = new AdWhirlLayout(activity, ADWHIRL_ID);
adView.setMaxWidth((int) (dm.density * 320));
adView.setMaxHeight((int) (dm.density * 53));
adView.setGravity(Gravity.CENTER);
parentView.addView(adView);

就是这样。
更复杂的方式
GoodNews中,虽然我想要一种更复杂的方式:当adwhirl忙于获取广告时,应该显示“广告加载…”消息,如果它没有任何东西可以填充内部广告横幅(在应用程序中作为资源提供,这样即使没有Internet也可以工作),则应该显示。加载消息很容易,因为它可以像上面所示的那样实现,但是动态的内部横幅有点复杂。
解决方案是adwhirl提供的强大的自定义事件,不幸的是,这些事件的文档记录很糟糕。第一步是在AdWhirl Web界面中创建自定义事件:
打开“广告网络设置”
点击顶部的“广告定制事件”按钮
输入任意名称(例如“回退”)和函数名称(后者将直接映射到Java类中的方法名称)
在为事件分配0%时启用该事件
现在打开“回填优先级”屏幕,并将回退事件移动到列表的末尾
上面的配置确保,只有当AdWhirl无法显示任何真正的广告时,才会触发自定义事件。
现在需要在代码中处理事件。因此,您需要一个实现AdWhirlLayout.AdWhirlInterface的类,并定义一个不带参数的公共方法和一个与自定义事件指定的函数名相等的名称。然后,此方法可以将特定视图注入AdWhirl布局:
class AdWhirlEventHandler implements AdWhirlLayout.AdWhirlInterface {
    private final AdWhirlLayout adView;

    public AdWhirlEventHandler(AdWhirlLayout adView) {
        this.adView = adView;
    }

    @Override
    public void adWhirlGeneric() {
        // nothing to be done: Generic notifications should also be
        // configurable in the AdWhirl web interface, but I could't find them
    }

    /**
     * Will be called by AdWhirl when our custom event with the function name
     * "fallback" is fired. Called via reflection.
     */
    public void fallback() {
        try {
            final View fallbackView =
                ... // inflate the view to be shown here
            adView.pushSubView(fallbackView);

            /*
             * reset backfill chain and schedule next ad update
             */
            adView.adWhirlManager.resetRollover();
            adView.rotateThreadedDelayed();
        } catch (MyExpectedException ex) {
            /*
             * forward to next option from the backfill list
             */
            adView.rolloverThreaded();
        }
    }
}

现在您需要向AdWhirlLayout注册事件处理程序,如下所示:
adView.setAdWhirlInterface(new AdWhirlEventHandler(adView));

就是这样。

07-27 16:19