Бюджет: 2000 UAH Срок: 3 дня
Добрый день, могу быстро и качественно выполнить ваш заказ.
Здравствуйте!
Есть страница с верхним тулбаром ConstraintLayout, внутри слева Заголовок, справа редактирование.
Надо посередине добавить маленькие пиктограммы сторисов, которые обтекают друг-друга, и имеют общую обводку.
Это при состоянии Collapsed.
Внизу есть вертикальный RecyclerView.
При потягивании вниз, надо чтобы скролл закончился, затем если еще раз потянуть вниз, сторисы раскрывались как в телеграм. Ниже прикреплю файл.
После того как сторисы раскрылись (состояние Expanded), между сторисами должно появится расстояние 16dp и обводки разделиться, у каждого своя обводка, учитывая, сколько внутри контента.
Но нужно сделать без использования CoordinatorLayout или Compose, так как должен быть xml и c MotionLayout.
Напишите пожалуйста, сроки и стоимость, если это реализуемо

Бюджет: 2000 UAH Срок: 3 дня
Добрый день, могу быстро и качественно выполнить ваш заказ.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/motionLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:layoutDescription="@xml/activity_main_scene"> <!-- Внутрішній MotionLayout для анімацій всередині "Toolbar" --> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="56dp" android:background="?colorPrimary"/> <ImageView android:id="@+id/stories_1" android:layout_width="0dp" android:layout_height="0dp" android:src="@drawable/ic_stor_1"/> <ImageView android:id="@+id/stories_2" android:layout_width="0dp" android:layout_height="0dp" android:src="@drawable/ic_stor_2" /> <!-- Нижня частина інтерфейсу (можливо, FrameLayout або RecyclerView) --> <FrameLayout android:id="@+id/frameLay" android:layout_width="match_parent" android:layout_height="0dp" android:background="@android:color/transparent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar" /> </androidx.constraintlayout.motion.widget.MotionLayout>
activity_main_scene.xml<?xml version="1.0" encoding="utf-8"?> <MotionScene xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:motion="http://schemas.android.com/tools"> <Transition android:id="@+id/default_transition" app:constraintSetEnd="@+id/start" app:constraintSetStart="@+id/end" app:duration="300"> <OnSwipe motion:dragDirection="dragUp" motion:maxAcceleration="200" motion:touchRegionId="@id/frameLay" /> </Transition> <ConstraintSet android:id="@+id/start"> <!-- Ваші початкові налаштування --> <Constraint android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="56dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Constraint android:id="@+id/stories_1" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginEnd="32dp" app:layout_constraintEnd_toEndOf="@id/toolbar" app:layout_constraintStart_toStartOf="@+id/toolbar" app:layout_constraintTop_toTopOf="@+id/toolbar" app:layout_constraintBottom_toBottomOf="@+id/toolbar"/> <Constraint android:id="@+id/stories_2" android:layout_width="32dp" android:layout_height="32dp" app:layout_constraintTop_toTopOf="@+id/toolbar" app:layout_constraintBottom_toBottomOf="@+id/toolbar" app:layout_constraintStart_toEndOf="@+id/stories_1" android:layout_marginStart="-16dp"/> </ConstraintSet> <ConstraintSet android:id="@+id/end"> <!-- Ваші кінцеві налаштування --> <Constraint android:id="@+id/toolbar" android:layout_width="0dp" android:layout_height="156dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Constraint android:id="@+id/stories_1" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginEnd="32dp" app:layout_constraintEnd_toEndOf="@id/toolbar" app:layout_constraintStart_toStartOf="@+id/toolbar" app:layout_constraintTop_toTopOf="@+id/toolbar" app:layout_constraintBottom_toBottomOf="@+id/toolbar"/> <Constraint android:id="@+id/stories_2" android:layout_width="32dp" android:layout_height="32dp" app:layout_constraintTop_toTopOf="@+id/toolbar" app:layout_constraintBottom_toBottomOf="@+id/toolbar" android:layout_marginStart="16dp" app:layout_constraintStart_toEndOf="@+id/stories_1"/> </ConstraintSet> </MotionScene>
package com.dimonbugor.motionlayoutapp;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.motion.widget.MotionLayout;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.dimonbugor.motionlayoutapp.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private MotionLayout outerMotionLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
outerMotionLayout = binding.motionLayout;
outerMotionLayout.setProgress(1);
// Додаємо TransitionListener до зовнішнього MotionLayout
outerMotionLayout.setTransitionListener(new MotionLayout.TransitionListener() {
@Override
public void onTransitionStarted(MotionLayout motionLayout, int startId, int endId) {
}
@Override
public void onTransitionChange(MotionLayout motionLayout, int startId, int endId, float progress) {
}
@Override
public void onTransitionCompleted(MotionLayout motionLayout, int currentId) {
}
@Override
public void onTransitionTrigger(MotionLayout motionLayout, int triggerId, boolean positive, float progress) {
// Не використовується в даному випадку
}
});
}
}
Мы DTC wellness бренд, продаем БАДы на рынок США по подписке, а приложение является помощником, который ближе узнает клиента, получит его данные для дальнейшей рассылки по базе, которая будет напоминать о приеме БАДов (AM/PM), отмечать прием в календаре, показывать прогресс. Приложение геймифицировано с ачивками, персонализированными пуш-уведомлениями с комплиментами на каждый день и приятными предсказаниями (как в печеньках). Бекенд / данные — Firebase 1. ОнбордингПользователь открывает приложение — первый экран с логотипом SHE·8, фото девушки и текстом «Ваш ежедневный сброс начинается с вас.» Внизу кнопка «НАЧАТЬ», под ней ссылка «Уже есть аккаунт? Войти».2. РегистрацияПосле нажатия «Начать» начинается опрос из 5 шагов (Шаг 1 из 5). Первый вопрос: «Какова ваша основная цель?» — варианты: Лучший сон, Меньше стресса, Больше энергии (выбрано), Лучший фокус. Кнопка «ДАЛЕЕ» ведет дальше по шагам.3. Настройка напоминанийПосле опроса пользователь задает время двух напоминаний — утреннего (08:00) и вечернего (20:00), с пояснением, что приложение напомнит о приеме капсул. Кнопка «СОХРАНИТЬ».4. Утренний сбросЭкран приветствия: «Доброе утро, Сара ☀️», «День 8 вашего сброса», иллюстрация капсул со стаканом воды, инструкция принять утренние капсулы. Кнопка «Я СДЕЛАЛ ЭТО ✓» — пользователь отмечает выполнение.5. Поздний чек-ин / Вечерний сбросТемный экран с луной — «Вечерний сброс», текст «Самое время расслабиться и позаботиться о себе». Кнопка «Я СДЕЛАЛ ЭТО ✓».6. Напоминание, если пропущен вечерний приемЕсли пользователь забыл отметиться, показывается экран «Привет, Сара! » с иконкой уставшего смайлика, текстом «Вы еще не отметили вечерний прием» и двумя кнопками: «Да, сделать сейчас» (основная) и «Позже» (второстепенная).7. Главная панельПосле онбординга или входа пользователь попадает на главный экран: «Привет, Сара! », мотивационная фраза, блок «Текущая серия — 8 дней » и круговой индикатор «Прогресс — 80%». Внизу нижняя навигация: Главная, Прогресс, Календарь, Я.8. ПрогрессВкладка «Мой прогресс»: текущая серия (8 дней), «Дни завершены 8/10» с прогресс-баром, недельный трекер (Пн–Вс с отметками выполнено/пропущено), общий «Общий прогресс — 80%».9. КалендарьВкладка «Календарь»: месячный вид (Июнь 2025), дни отмечены цветом — выполнено (зеленый), сегодня (синий), пропущено (красный). Пользователь может нажать на конкретный день.10. Деталь дняПри выборе дня (8 июня 2025) открывается детальный экран: статус утреннего (08:15 ✓ Завершено) и вечернего (20:05 ✓ Завершено) приемов, плюс поле «Ежедневная заметка» с личной заметкой пользователя.11. Ваши результатыЭкран «Ваши результаты» — сравнение показателей «До» и «После» (Энергия, Сон, Стресс) в виде прогресс-баров, которые наглядно показывают улучшение. Кнопка «ПОСМОТРЕТЬ МОЙ ПУТЬ».12. МотивацияЭкран «Ежедневная мотивация» с фоновым фото и вдохновляющей цитатой: «Маленькие ежедневные действия создают большие изменения.»13. ДостиженияВкладка «Достижения»: список полученных наград (Первый шаг, 7 дней подряд, 10 дней подряд) и следующая цель («Следующее достижение — 30 дней подряд», прогресс 8/30).14. ПрофильВкладка «Профиль»: аватар и имя пользователя (Сара), список настроек — Личная информация, Напоминания, Уведомления, Подписка, Помощь и поддержка, и кнопка «Выйти».
Мы пройдемся по каждому пункту. Техническое задание на разработку мобильного приложения для службы доставки суши Необходимо разработать мобильное приложение (Android и iOS) по функционалу, максимально приближенное к сайту 911sushi.com.Основные требованияИнтеграция Полная интеграция с Poster POS. Все заказы должны автоматически поступать непосредственно в Poster. Использование существующей клиентской базы Poster. Автоматическое применение персональных скидок гостя, которые уже настроены в Poster.Авторизация пользователей Регистрация и авторизация. Вход по номеру телефона (или другой современный способ авторизации). Сохранение истории заказов. Персональные скидки и акции для пользователя.Меню Просмотр категорий и товаров. Детальная информация о позициях. Возможность добавления товаров в корзину. Выбор модификаторов и добавок (по необходимости).Корзина и оформление заказа Выбор адреса доставки. Сохранение нескольких адресов пользователя. Выбор города. Выбор времени доставки или "как можно быстрее". Отображение стоимости доставки в зависимости от зоны. Поддержка зон доставки с возможностью их редактирования.Административная панель Необходима удобная админ-панель с возможностью: редактирования меню; добавления и удаления позиций; изменения цен; изменения категорий; управления акциями; создания и рассылки промокодов; установки лимита использования промокодов; просмотра статистики.Акции и маркетинг Предусмотреть возможность: промокода на первый заказ; бонуса или скидки за установку приложения; создания промокодов с ограниченным количеством использований; массовых рассылок промокодов пользователям; проведения акций без необходимости обновления приложения.Аналитика Нужна детальная статистика: общая статистика работы приложения; статистика по каждой позиции меню; конверсия пользователей; количество установок; количество оформленных заказов; средний чек; повторные покупки; аналитика доставок по адресам; выборка 100 самых популярных улиц доставки; другие ключевые показатели для анализа продаж.Информационные разделы В приложении должны быть: ссылки на социальные сети; контакты; карта с расположением заведения; информация о компании; условия доставки и оплаты.Требования к работе приложения быстрая и стабильная работа; отсутствие зависаний и критических ошибок; современный и понятный интерфейс; поддержка актуальных версий Android и iOS.Дизайн Отдельного дизайна на данный момент нет. В качестве основы можно взять существующий сайт 911sushi.com. Все необходимые материалы уже подготовлены: логотипы; фирменные цвета; меню; брендбук (при наличии).Поэтапная реализация Рассматриваю поэтапную разработку:Этап 1 базовый функционал; интеграция с Poster; меню; корзина; оформление заказа; авторизация; личный кабинет.Этап 2 промокоды; система акций; аналитика; статистика; дополнительные маркетинговые инструменты; другие функции, которые будут возникать в процессе развития проекта.Дополнительные условия После завершения разработки нужно предоставить 30 дней тестового периода, в течение которого будут исправляться возможные недостатки. После успешного тестирования - финальный расчет. Важно, чтобы исполнитель был готов к постепенному расширению функционала, так как новые задачи могут возникать в процессе работы. Приоритет - максимально короткие сроки реализации без потери качества. Желательно, чтобы исполнитель был из Луцка, но это не является обязательным условием.Прошу в ответе на заявку указать: ориентировочные сроки реализации; стоимость; стек технологий; примеры похожих проектов; опыт интеграции с Poster POS; готовы ли работать поэтапно; предоставляете ли гарантийную поддержку после запуска.
Цель: создать APK для андроида или firestick , установить на телевизор и с компьютера запускать видео чтобы по всем телевизорам показывало одинаковые в видео. Применятся будет для клиник чтобы крутить определённые видео по телевизорам. Так же иметь playlists чтобы каждый определённый телевизор показывал только выбранный плейлист. Программа должна закачивать видео на девайс а не стримать его , тем самым сохраняя интернет и ресурсы. При обновлении Playlist, программа обновится и будет показывать новые видео.