Установка плавающего баннера

Плавающие баннеры представляют собой контейнер, жестко прикрепленный к верхней или нижней границе экрана. Использовать такие баннеры можно в компоненте ListView. Баннер будет автоматически скрываться на время прокрутки. Также плавающие баннеры, в отличие от стандартных, могут иметь кнопку закрытия.

Внимание! Перед использованием контейнеров MADNET SDK убедитесь, что ваш проект правильно настроен для работы с библиотекой.

Создание и размещение

Процесс размещения плавающего баннера состоит из 2х этапов: описание элементов в XML и настройка компонента посредством кода. Таким образом, можно полностью настроить формат отображения баннера: добавить возможность закрытия баннера и установить слушателей на события прокрутки. Ниже приведен поэтапный пример встраивания такого баннера:

Откройте XML-layout, в котором должен быть размещен ваш ListView и вложите ListView в com.madnet.ads.AdFloatingLayout, например, так:

<com.madnet.ads.AdFloatingLayout
    android:id="@+id/adFloatingLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.madnet.ads.AdFloatingLayout>

Добавьте атрибуты к контейнеру com.madnet.ads.AdFloatingLayout - идентификатор вашей площадки ${PID} баннера и размер контейнера указанный в личном кабинете, например, так:

<com.madnet.ads.AdFloatingLayout
    android:id="@+id/adFloatingLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    mad:space_id="${PID}"
    mad:dimension="MAD_SIZE_320x50" >
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.madnet.ads.AdFloatingLayout>

Настройте дополнительные опции для контейнера com.madnet.ads.AdFloatingLayout:

							
public class FloatingActivity extends FragmentActivity {

    private ListView mListView;
    private AdFloatingLayout mAdFloatingView;   

	@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_listview_layout);
       
        mListView = (ListView) findViewById(R.id.your_list_view_id);
        mAdFloatingView = (AdFloatingLayout) findViewById(R.id.adFloatingLayout);
        mAdFloating.setupAd(mListView , AdFloatingLayout.IN_FOOTER, true); 
        mAdFloatingView.showBanners(new AdRequest.Builder().getRequest());      
    }
}

Если вы хотите расположить баннер по верхней границе, используйте AdFloatingView.IN_HEADER, если по верхней - AdFloatingView.IN_FOOTER. Третий аргумент, boolean, определяет - показывать ли кнопку закрытия на баннере.

Управление контейнером

Подобно AdStaticView, некоторые из параметров этого контейнера могут быть изменены. К этим параметрам относятся:

  • Duration - продолжительность анимации (от 0 до 5000 мс). Если установить значение в 0, баннеры будут сменяться без анимации.
  • Space ID - идентификатор блока площадки ${PID}.
  • AdListener - слушатель для событий взаимодействия пользователя и баннера.
  • AdStaticView.OnCloseListener - слушатель нажатия кнопки закрытия.

Например, для того, чтобы изменить временной интервал, в течение которого происходит анимация баннеров, можно воспользоваться методом setDuration (long millis) класса AdStaticView. С помощью этого метода также можно удалить анимацию при смене баннеров, приняв значение millis равным нулю.

Уничтожение контейнера

Внимание: Раздел содержит важную информацию по предотвращению проблем с утечками памяти.

При удалении контейнера из вёрстки приложения смена баннеров приостанавливается, но сам контейнер может находиться в памяти в течение неопределенного времени, ожидая возобновления работы. Для окончательного удаления компонента из памяти следует использовать метод dismiss(). Он полностью прекращает любую деятельность контейнера. После этого использовать контейнер повторно невозможно. Ресурсы, занимаемые компонентом, становятся доступными для сборщика мусора. Контейнер может быть уничтожен в любой момент, но по завершении работы Activity он должен быть уничтожен в обязательном порядке - в противном случае произойдет утечка памяти. Используйте возможность переопределить метод onDestroy() класса Activity, чтобы обезопасить ваше приложение от замусоривания памяти.

Обработка событий

Событие прокрутки

Для обработки событий прокрутки вы можете использовать стандартный класс AbsListView.OnScrollListener, однако его следует устанавливать не для экземпляра ListView, а непосредственно контейнеру AdFloatingLayout

public class FloatingActivity extends FragmentActivity 
implements AbsListView.OnScrollListener {

    private ListView mListView;
    private AdFloatingLayout mAdFloatingView;   

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_listview_layout);
       
        mListView = (ListView) findViewById(R.id.your_list_view_id);
        mAdFloatingView = (AdFloatingLayout) findViewById(R.id.adFloatingLayout);
        mAdFloating.setupAd(mListView , AdFloatingLayout.IN_FOOTER, true); 

        //Слушатель scroll'a устанавливается контейнеру баннера а не ListView!
        mAdFloatingView.setOnListScrollListener(this);

        //Запустите ротацию баннеров. Это можно сделать и позже.
        mAdFloatingView.showBanners(new AdRequest.Builder().getRequest());      
    } 

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //Здесь ваша реализация
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, 
                       int visibleItemCount, int totalItemCount){
        //Здесь ваша реализация
    }
}

Событие закрытия баннера

Если необходимо обработать событие закрытия баннера, это можно сделать с помощью интерфейса AdStaticView.OnCloseListener. Так вы можете реагировать на попытку закрыть баннер и, если есть необходимость, предотвратить её. Например, продемонстрировать некое диалоговое окно и, в зависимости от выбора пользователя, либо действительно удалить баннер, либо закрыть его.

public class FloatingActivity extends FragmentActivity 
                              implements AbsListView.OnScrollListener {
  
    ListView mListView;
    AdFloatingLayout mAdFloatingView;   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_listview_layout);
       
        mListView = (ListView) findViewById(R.id.your_list_view_id);
        mAdFloatingView = (AdFloatingLayout) findViewById(R.id.adFloatingLayout);
        mAdFloating.setupAd(mListView , AdFloatingLayout.IN_FOOTER, true); 

        //Слушатель scroll'a устанавливается контейнеру баннера а не ListView!
        mAdFloatingView.setOnListScrollListener(this);

       //Теперь вы сможете перехватить нажатие на кнопку закрытия
       mAdFloatingView.setOnFloatingCloseListener(this);

        //Запустите ротацию баннеров. Это можно сделать и позже.
        mAdFloatingView.showBanners(new AdRequest.Builder().getRequest());      
    }

    @Override
    public void onCloseClicked(View v){
        // Метод будет вызван после того, как пользователь нажмет на кнопку.
        // Закрытия баннера в этом случае не произойдет.
        // Чтобы закрыть баннер, достаточно вызвать mAdFloatingView.dismiss().
    }
}
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0
Еще есть вопросы? Отправить запрос

Комментарии

На базе технологии Zendesk