Какие типы фотографий отображаются на сайте в мобильном приложении

Обновлено: 19.09.2024

Для кампаний типа «Текстово-графические объявления» и «Реклама мобильных приложений» вы можете добавить к объявлению изображение. Правильно подобранные изображения привлекают к рекламе больше внимания и помогают быстрее понять суть предложения.

Изображения показываются в сетях (РСЯ и внешние сети).

Иллюстрированные объявления могут выглядеть так:

  • Текстово-графические объявления
  • Реклама мобильных приложений

Формат объявлений зависит от настроек площадки, где показывается реклама. Узнайте больше о различных форматах рекламных блоков в РСЯ.

Как добавить изображение

Изображение можно загрузить в процессе создания или редактирования объявления.

Чтобы добавить изображение, в блоке Изображение выберите способ загрузки:

загрузить из галереи (ранее загруженных изображений).

Технические требования к изображению:

размер — от 450 пикселей по каждой стороне для текстово-графических объявлений, от 1080 пикселей — для рекламы мобильных приложений;

максимальный объем файла — до 10 МБ;

формат — JPG, PNG или GIF (будет использован только первый кадр).

Совет. Чтобы повысить эффективность объявлений, мы рекомендуем использовать изображения, размер которых составляет от 1080 до 5000 пикселей.

Мы рекомендуем создавать два варианта каждого объявления: со стандартным и с широкоформатным изображением. Так ваши объявления будут показаны на всех доступных площадках.

Для успешного прохождения модерации изображение должно соответствовать требованиям к оформлению объявления.

При размещении в рекламном блоке на той или иной площадке изображение может быть уменьшено и обрезано. Если в каком-то из форматов ваше изображение обрезано не так, как вам хотелось бы, задайте смарт-центры вручную .

Добавить изображения сразу в несколько объявлений можно с помощью XLS/XLSX-файлов или Директ Коммандера , через оптовые операции в мультиредактировании или API Яндекс.Директа.

Статистика показов объявлений с изображением доступна в Мастере отчетов. Подробнее о том, как оценить результат кампании.

Ограничение. При редактировании объявлений в мобильном приложении Директа добавить изображение невозможно.

Смарт-центры

В Директе вы можете настроить для каждого формата изображения смарт-центр — главную по смыслу область, которая не будет потеряна при автоматической обрезке.

Отметьте нужное объявление и в меню Действия выберите Редактировать . В блоке Изображение нажмите Редактировать  → Задать смарт-центры . Выберите формат и переместите рамку смарт-центра на нужную позицию. Сохраните изменения.

Просмотрите эскизы объявлений с помощью стрелок. Нужный формат также можно выбрать в меню, нажав .

Приложение Dropbox для Android автоматически открывает для предпросмотра следующие типы файлов:

  • Файлы Adobe:
    • PDF (.pdf)
    • Illustrator (.ai, .eps)
    • Photoshop (.psd)
    • Документы Microsoft Word (.doc, .docx)
    • Презентации Microsoft PowerPoint (.ppt, .pptx, .pptm, .pps, .ppsm, .ppsx)
    • Электронные таблицы Microsoft Excel (.xls, .xlsx)

    Обратите внимание: над открытым для предпросмотра файлом может отобразиться всплывающее уведомление с информацией о том, что появилась новая версия просматриваемого файла. В уведомлении также указывается, кто именно внес изменения. Если нажать Обновить, окно для предпросмотра обновится и вы увидите самую последнюю версию файла.

    Для других типов файлов Dropbox автоматически подберет подходящее приложение для просмотра и редактирования. По умолчанию на устройствах Android можно открывать файлы следующих форматов:

    Возможно, ваше устройство умеет открывать файлы и других форматов. Все зависит от комплектации и от версии ОС. Если же приложение, поддерживающее нужный тип файлов, не найдено, вам понадобится его установить.

    На сайте Android вы найдете подробную информацию о том, какие медиаформаты поддерживает ОС. Чтобы узнать, как воспроизводить мультимедийные материалы с помощью мобильного приложения Dropbox, ознакомьтесь со статьей, посвященной конвертированию мультимедийных файлов в нужный формат.

    Как открыть и отредактировать файл в другом приложении

    Если вам понадобилось внести изменения в какой-либо файл из своего Dropbox через стороннее приложение, вам потребуется открыть файл через это приложение.

    1. Запустите Dropbox и найдите файл, который требуется открыть в другом приложении.
    2. Нажмите стрелку вниз справа от нужного файла.
    3. Нажмите Открыть с помощью, чтобы отобразился список доступных приложений, с помощью которых можно открыть файл. Можно также нажать Всегда, чтобы потом это приложение открывало файлы такого типа по умолчанию. Если вы захотите сбросить приложения по умолчанию, это можно сделать в настройках Dropbox.

    Экспорт файлов в память

    Приложение Dropbox для Android позволяет вручную экспортировать файлы в память устройства или на SD-карту (если таковая имеется).

    1. Запустите приложение Dropbox и коснитесь файла, который требуется экспортировать.
    2. Нажмите стрелку вниз справа от нужного файла.
    3. Нажмите Экспортировать.

    Dropbox отобразит список приложений, в которые можно экспортировать файл. Чтобы сохранить файл в память устройства, выберите пункт Сохранить на устройство. Если, нажав Сохранить на устройство, вы не увидели своей SD-карты, нажмите кнопку меню в правом верхнем углу экрана и выберите Настройки. Проверьте, стоит ли галочка в пункте Показывать дополнительные устройства.

    Что если мои документы не отображаются для предпросмотра в приложении Dropbox?

    Если документ не отображается для предпросмотра, то, скорее всего, он защищен паролем. Таким образом гарантируется конфиденциальность файла. Чтобы открыть в Dropbox защищенный паролем файл:

    Если ваш файл относится к поддерживаемому системой формату, но при этом все равно не открывается для предпросмотра на устройстве Android, свяжитесь со службой поддержки Dropbox.

    Как часто вы меняете скриншоты в App Store или загружаете новое приложение в Google Play? Мне приходится сталкиваться с задачей подобного рода не чаще, чем раз в полугодие. За это время знания о процессе стираются и приходится вспоминать всё заново — гуглить статьи, переделывать множество макетов.

    В один прекрасный день я решила — хватит это терпеть! Я собрала в одной статье всю необходимую краткую информацию и ссылки на официальные источники, а также подготовила шаблон. Эти артефакты помогут вам быстро и практически безболезненно подготовить нужный графический контент для публикации вашего приложения в App Store, Google Play или Huawei AppGallery.

    Шаблон можно загрузить для Figma или Sketch.

    В каждом шаблоне есть 3 блока — App Store, Google Play и Huawei AppGallery, где собраны шаблоны для подготовки графического контента — скринов и иконок приложений. Все элементы уже нарезаны под требуемые платформой размеры. Вам останется разместить свой контент и скачать, нажав одну кнопку.

    Добавлю довольно банальную вещь — мир IT развивается очень быстро. Материалы в этой статье актуальны на конец 2020 года. Также будут приведены ссылки на первоисточники. С ними вы сможете ознакомиться, чтобы дополнительно убедиться в актуальности используемой вами информации.

    Начнём.

    Иконки для приложения должны отвечать следующим требованиям:

    • отсутствует заданный корнер-радиус (углы не скругляются),
    • отсутствуют слои с прозрачностью,
    • слои слиты (flatten),
    • формат png.

    В Human Interface Guidelines есть раздел App Icon, где можно ознакомиться с более подробной информацией о требованиях к иконкам.

    • Разместите иконку вашего приложения в шаблоне.
    • Иконки будут подписаны и сохранятся в необходимых для загрузки размерах.
    • И загрузите пак иконок для iPhone, iPad или обоих устройств сразу.

    Для приложения следует загрузить как минимум 1 скриншот. Максимально допустимое количество — 10.

    Для iPhone обязательны скриншоты в двух размерах: для девайсов 6.5 дюймов (1284 x 2778 px) — с «чёлкой» и 5.5 дюймов (1242 x 2208 px) — без «чёлки». Для остальных девайсов скрины уменьшаются автоматически.

    Для iPad обязательный размер один — 12.9 дюймов (2048 x 2732 px). Он обязателен для загрузки для iPad Pro 2 поколения и для iPad Pro 3 и 4 поколений. Скриншоты для остальных девайсов уменьшаются автоматически.

    Подробнее о требованиях к скринам для iPhone и iPad, а также Mac, Apple TV и Apple Watch можно ознакомиться в разделе Screenshot Specifications сайта App Store Connect Help. Также там вы найдете информацию о размерах скриншотов для каждого размера девайсов, если вдруг они вам понадобятся.

    Вы можете добавить не только скриншоты, но и видео, чтобы лучше рассказать о своем приложении. С требованиями можно ознакомиться в разделе App preview specifications сайта App Store Connect Help.

    Иконка приложения должна отвечать следующим требованиям:

    • размер 512 x 512 px,
    • формат png,
    • отсутствуют скругления (полный квадрат),
    • отсутствуют тени.

    Для приложения следует загрузить как минимум 2 скриншота. Максимально допустимое количество — 8.

    Для Android нет строгих правил по необходимым размерам скриншотов. Рекомендуется загружать изображения:

    • не менее 320 px,
    • не более 3840 px,
    • отношение длинной стороны к короткой не более 2:1.

    Мы с коллегами из e-Legion обычно используем скрины размером 1920 x 1080 px.

    Для Android помимо скринов нужно подготовить дополнительные изображения.

    — Значок с высоким разрешением (в дополнение к иконке приложения):

    — Картинка для описания (рекламное изображение, отражающее суть приложения):

    • формат png или jpeg,
    • размер 1024 х 500 px.

    — Баннер для телевизора (отображается только на Android TV, но система может требовать данное изображение, даже если ваше приложение не поддерживает подобные устройства):

    • формат png или jpeg,
    • размер 1280 х 720 px.

    В шаблонах для данных изображений нужно разместить ваш контент и скачать.

    В приложениях мы показываем десятки тысяч картинок из разных источников — загружаем из сети, локально, генерируем. Плодить разные сущности кода для их отображения трудоёмко и неэффективно, логичнее делать обобщения. Расскажу, как мы построили систему отображения картинок из любых источников и снизили уровень собственной боли от этого процесса.

    Приложение Revolut

    В нашем приложении много типов картинок для отображения — есть списки транзакций с разными иконками, списки карточек, Lottie-анимации, гифки. Покажу, как мы работаем с картинками на примере списка транзакций.

    У нашего списка транзакций насчитывается несколько десятков типов ячеек. Для примера мы возьмем пять:


    Разные типы транзакций, где мы показываем картинку

    В каждом случае картинка взята из отдельного источника или сгенерирована.

    Как работает стандартный способ отображения картинок

    Создадим адаптер для такого списка.

    Так будет выглядеть стандартный шаблон адаптера для RecyclerView . Реализуем биндинг значений:

    Появляется портянка условий, потому что внутри адаптера для каждого вида транзакции мы строим отдельную логику. Можно усложнить и использовать свой ViewType под каждый источник. Тем более к этому подталкивает контракт адаптера:

    Учитывая, что в нашем случае может быть несколько десятков видов транзакций, стандартный способ реализации адаптера не подходит.

    Как улучшить адаптер

    Можем выделить два основных подхода к расширению — ViewType или делегаты. Остальные не упоминаю специально: по своей сути они будут похожи на второй подход.

    Первый вариант — ViewType — можно использовать, когда приложение простое, то есть содержит один простой список и, например, пару экранов. Нам этот способ не подходит, потому что такие адаптеры нельзя переиспользовать. Если мы будем расширять адаптер, добавляя новые ViewType , адаптер будет неконтролируемо расти. Кроме того, под каждый экран нам придётся создавать свои адаптеры.

    17–19 декабря, Онлайн, Беcплатно

    Второй подход — с делегатами — выглядит привлекательнее. Он позволяет не создавать разные адаптеры под каждый экран, а использовать делегаты. Четыре года назад об этом писал Ханс Дорфман, и на GitHub можно найти много библиотек с реализацией такого подхода. Мы будем использовать реализацию самого Дорфмана.

    Смотрим на пример простого делегата, который отображает ProgressBar.

    Внутри делегата, как и в стандартном адаптере, создаем ViewHolder . Происходит биндинг. Главное отличие от стандартного адаптера в том, что у каждого делегата есть своя модель. Она будет использоваться, чтобы отобразить нужный тип ячейки. В свою очередь, у каждой модели есть интерфейс ListItem с полем listId и методом calculatePayloads внутри.

    Перейдём к реализации адаптера, который умеет отображать делегаты.

    В этой реализации видно, зачем нужен интерфейс ListItem — его удобно использовать для ListDiffCallback , чтобы DiffUtil не обновлял ячейки, которые не изменились, и не запускал лишние анимации. Кроме того, так как для моделей используется Data class, нам из коробки доступен equals . Вся работа с DiffUtil сводится к правильному созданию модели делегата.

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

    Благодаря делегатам создание адаптера под каждый экран упрощается.

    Как отображать картинки

    Теперь уберём логику загрузки и отображения картинок из адаптера, разгрузим onBindViewHolder . Мы должны реализовать две сущности — модель картинки и делегат, который будет уметь загружать и отображать её. Рассмотрим пример модели, где загружаем картинку из ресурсов.

    Сначала сделаем интерфейс Image . Затем опишем набор параметров для ResourceImage , по которым хотим настраивать отображение. В данном случае — id ресурса картинки и цвета, если хотим её закрасить.

    Теперь перейдём к делегату загрузки и определим его интерфейс. Отсюда понятно, зачем нам интерфейс Image .

    Каждый делегат должен уметь делать две вещи:

    1. определять, умеет ли он отображать переданную картинку или нет;
    2. отображать картинку в ImageView .

    Так будет выглядеть делегат загрузки картинки из ресурсов.

    • метод suitsFor() проверяет, что image — ResourceImage ;
    • внутри метода displayTo() мы устанавливаем картинку в ImageView и, если colorRes не null , то выставляем tint .

    Это самый простой из возможных делегатов.

    Как объединить делегаты

    Объединим все поддерживаемые делегаты в одном месте и сократим интерфейс взаимодействия до метода displayTo() .

    Обращаю внимание на строку 18. При помощи метода first() мы находим первый подходящий делегат для отображения картинки. Если нужный делегат не найден, возможен краш, и это не ошибка проектирования. Мы намеренно придерживаемся принципа fail-fast, чтобы быстро избавиться от неочевидного поведения. Например, когда картинка не отобразилась, а мы не знаем причину.

    Как запустить трансформации

    Разберёмся, зачем в отображении транзакции могут понадобиться трансформации. Предположим, у нас есть аватарка контакта или продавца, которую мы получаем из сети. Она может иметь любую форму и размер, но в приложении Revolut мы должны отобразить её круглой и определённого размера — 40х40 dp.


    Аватары в приложении Revolut

    Настроим модель и добьёмся такого поведения.

    Возьмём UrlImage . Любая картинка, которой нужна поддержка трансформаций, должна иметь соответствующие настройки. Можно ввести интерфейс TransformableImage со свойством transformations :

    Класс настроек может выглядеть так:

    Для отображения картинок используем Glide. Соответственно, трансформации ориентированы под эту библиотеку.

    Так создаётся массив преобразований. Отмечу два момента, которые помогут избежать лишней работы.

    Во-первых, поля помечены как nullable, и это позволяет задавать только нужные трансформации. Во-вторых, не очевидно, но критично, в каком порядке трансформации будут вызваны.

    Представим, что на входе — очень широкая картинка, которую надо повернуть, отмасштабировать и скруглить. Сравним два сценария развития событий.

    В первом случае сначала мы поворачиваем картинку на 90 градусов, затем закругляем и только после этого меняем ширину. Во втором случае мы сначала меняем ширину.

    Второй сценарий эффективнее, так как поворот и скругление «дешевле» делать на меньших изображениях.

    Вернёмся к реализации. Ранее мы создали массив, который теперь должны передать в Glide, когда он будет отображать картинку по URL. Создаём объект RequestOptions и передаём ему массив. Помним, что нельзя передавать пустой массив — Glide упадёт. Поэтому обязательно добавляем проверку.

    Так как будем переиспользовать трансформации в разных делегатах, будет удобно вынести их в экстеншн applyImageTransformations .

    Также добавляем метод в интерфейс TransformableImage — getGlideTransformsArray() . Сам интерфейс и экстеншен applyImageTransformations помечены как internal . Так мы избегаем утечки абстракции, и конечный пользователь моделей и делегатов не знает, что используется внутри — в публичных интерфейсах Glide не виден. Удобно, если захотим заменить Glide на другую библиотеку.

    В итоге код сокращается до такого вида:

    Как создать делегат для отображения транзакции

    Посмотрим снова на наш список транзакций. Мы уже знаем, как работает адаптер делегатов. Теперь создадим делегат для отображения транзакции.

    Базовая реализация адаптера выглядит так:

    Отображение текста убрано для упрощения. Мы научим этот делегат отображать транзакции с картинками из сети, из ресурсов, показывать аватар контакта, который создаётся из инициалов.

    Сначала модифицируем модель.

    В каждом случае передаём свои параметры, все в одном месте. Примерно так будет отображаться картинка:

    Сразу видим минусы:

    • такое решение тяжело расширять;
    • важен порядок, который в свою очередь может быть неочевидным;
    • бизнес-логика находится внутри адаптера (делегата).

    Начнём сначала и попробуем использовать делегаты. Сделаем несколько доработок.

    В модели вместо всех параметров оставляем только картинку на отображение:

    В итоге список транзакций примет такой вид:

    Поведение становится более явным, и мы вынесли логику из адаптера.

    Как создать делегат для генерируемой картинки

    Теперь рассмотрим частный случай и создадим делегат, который будет генерировать изображение из двух символов. В первую очередь, определим требования к этому делегату. Очевидно, он должен уметь отображать буквы и настраивать отображение.

    Модель будет выглядеть следующим образом:

    Для настройки фона используем ImageTransformations .

    Перейдём к генерации битмапы. Можем использовать обертку TextDrawable , где внутри отрисовка идёт при помощи Canvas . Далее эту битмапу нужно обработать и установить в ImageView .

    За счёт использования экстеншена реализация делегата занимает пару строк. Покажу, как он работает.

    Первый вариант, где заданы базовые настройки:


    Во втором варианте добавляем трансформацию скругления:


    И в третьем — поворачиваем картинку. Нам ничего не стоит отображать иконку аватара в том виде, в котором это требуется согласно дизайну:


    Как создать кастомную трансформацию

    Представим, что нам надо сделать флип по горизонтали. Сначала создадим каркас класса трансформации:

    В случае с Glide базовый класс должен быть BitmapTransformation . Glide снова упрощает жизнь, так как содержит TransformationUtils с нужными методами. Остаётся лишь добавить эту трансформацию к остальным.

    Как тестировать

    Одна из главных причин, почему стоит использовать именно этот способ работы с картинками — тестирование.
    Нарисуем примерную схему архитектуры (clean) и покажем, как данные доходят до слоя UI. В качестве данных будем рассматривать список транзакций.


    Пример чистой архитектуры

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

    Рассмотрим, как может выглядеть доменная модель транзакции:

    У неё есть доступ к id транзакции, сумме и дате. Как понять, что показывать — это денежный перевод или покупка в магазине? Откуда брать название, URL? Нам помогут sealed class.

    Здесь мы видим два типа транзакций — перевод и покупка. Каждый имеет уникальный набор параметров.

    Далее разберёмся, что является моделью для слоя UI, и для этого вспомним, как выглядел наш делегат для адаптера RecyclerView .

    Модель делегата отлично подходит в качестве UI-модели.

    Рассмотрим несколько сценариев, которые можем протестировать только за счёт использования делегатов для адаптера и картинок.

    Кейс 1 — Перевод контакту без аватарки

    Проверяем, создаётся ли модель картинки для отображения инициалов, если отсутствует URL аватара .

    Кейс 2 — Перевод контакту с аватаркой

    Ожидаем, что будет создана UrlImage с одной трансформацией.

    Кейс 3 — Покупка в магазине, у которого в системе есть аватар

    Идентично кейсу 2: ожидаем, что будет создана UrlImage с одной трансформацией.

    Кейс 4 — Покупка в магазине без аватарки

    В данном случае можем сделать дополнительную проверку: каждая покупка может относиться к разным категориям, и иконки будут отличаться. Можем также проверить, мапим ли каждую категорию в нужную иконку.

    Выводы

    Отображение картинок с помощью делегатов даёт несколько преимуществ.

    Во-первых, мы освобождаем адаптер от логики, которой в нём быть не должно. Он не должен отвечать за выбор источника картинки в зависимости от набора параметров.

    Во-вторых, мы абстрагировались от способа загрузки и обработки изображений. Теперь в любой момент времени мы почти без боли можем заменить Glide на что-то другое.

    В-третьих, как следствие, мы можем тестировать отображение нужного типа картинки. То есть фактически тестировать отображение данных на экране.

    как сделать шаблон адаптивным

    Адаптивный дизайн – тот, который подстраивается под разные разрешения экрана при этом не теряя своей привлекательности. Это может производится как и засчёт адаптации каждого элемента сайта, так и банальным управлением отображения/скрытия контента на мобильных устройствах. Процесс создание адаптивного дизайна достаточно трудный, но скрыть или показать блоки сайта в зависимости от разрешения можно за несколько минут.

    Как сделать адаптивную вёрстку?

    Для того, чтобы сайт подстраивался под разные типы устройств, необходимо задать значения под все диапазоны экранов в таблице стилей CSS. Каждый шаблон состоит из блоков, у которых есть свой класс или идентификатор. Необходимо найти в таблице стилей нужный блок и прописать его поведение при различных экранных разрешениях. Возьмём, к примеру, фрагмент из таблицы стилей моего сайта. Блок w-container.

    Как видно из первой строчки, стандартная максимальная ширина для десктопного разрешения экрана составляет 940 пикселей. Из второй строчки легко заметить, что если максимальное разрешение экрана устройства в ширину не более 991 пикселя, блок будет растягиваться максимум на 728, что предотвратит разрушение структуры шаблона и контент будет всегда в зоне видимости.

    И таким образом, нужно спроектировать и описать каждый блок шаблона сайта. Задача не из лёгких, согласитесь? Да и к тому же, очень индивидуальная. Однако, большинство шаблонов и фреймворков уже итак неплохо отображаются на мобильных телефонах, за мелкими исключениями. Поэтому, скрыть или показать некоторую информацию для определенных экранных разрешений будет достаточно, чтобы сайт более-менее сносно отображался на разных типах экранов.

    Как скрыть часть информации от мобильных устройств?

    как скрыть информацию для мобильных устройств


    Как Вы уже поняли, в помощь нам приходит media screen в CSS, с помощью которого можно регулировать отображение структуры сайта в зависимости от разрешений экранов. Для начала, нам нужно заключить скрываемую информацию в дополнительный div-контейнер, назовём его hidemobile.

    А после этого, добавить в style.css вашего сайта следующий фрагмент кода:

    В этом случае, если разрешение экрана устройства менее 600 пикселей, контент, заключенный в этот div, на нём не отобразится. Значение max-width Вы можете поменять на своё усмотрение.

    Как сделать информацию видимой только на мобильных устройствах?

    как показать информацию только для мобильных устройств


    Возможно, у вас есть какое-то целевое предложение или контент, предназначенный только для владельцев смартфонов. Или же вы банально хотите показывать мобильным посетителям принципиально другое содержание страницы. В любом из этих случаев, рассмотрим способ отображения контента только на маленьких разрешениях экрана.

    Порядок действий схожий с предыдущим пунктом. Обернем нужный контент в новый div.

    А после добавим в style.css сайта этот фрагмент кода:

    Удачной вёрстки!

    Как мы выяснили, при помощью несложных CSS-конструкций с применением media screen можно управлять отображением информации на странице. Также, предлагаю вам почитать каким должен быть продающий сайт и способы отправки HTML-писем.

    Читайте также: