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

-
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) { // Не використовується в даному випадку } }); } } -
Актуальные фриланс-проекты в категории Разработка под Android
Нужен человек, который сейчас физически в ЯпонииНужно протестировать открытие ссылки и записать экран смартфона. Ничего сложного. Любой сможет это сделать. Разработка под Android, Тестирование и QA ∙ 2 дня 7 часов назад ∙ 3 ставки |
Скрипт для модификации APKУ меня есть скрипт под старые версии APK Minecraft, который позволял делать версию игры с более меньшим весом за счет того, что там удалялась музыка. Также, скрипт делал клон Minecraft (чтобы можно было иметь две игры майнкрафт на своем устройстве...), а также во вкладку… Java, Разработка под Android ∙ 2 дня 17 часов назад ∙ 12 ставок |
Необходимо разработать мобильное приложение для Android и iOSНеобходимо разработать мобильное приложение для Android и iOS, которое будет работать как мессенджер с нашим AI через готовый Backend и API.Функционал: авторизация; список AI-ассистентов; чат; отправка и получение сообщений; поддержка WebSockets (диалог в реальном времени);… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 4 дня 3 часа назад ∙ 43 ставки |
Трансформация сайта intebwio на платформы: android, ios, windows, linux 5000$
224 554 UAH
Привет! Я ищу опытного программиста, команду или агентстводля комплексного переноса моей инновационной веб-платформы Intebwio напосвященные приложения для систем: Android, iOS, Windows и Linux.О продукте: Intebwio — это основанный на искусственном интеллектебраузер/поисковик… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 4 дня 5 часов назад ∙ 19 ставок |
Разработчик Ton Blockchain 10000 $
449 215 UAH
Здравствуйте! Я ищу фрилансера-разработчика TON для [краткосрочного / долгосрочного] проекта. Мне нужен кто-то, кто может помочь мне с [конкретно укажите, что вам нужно, например, написание смарт-контракта для стейкинга / подключение фронтенда к TonConnect / создание токена].… Разработка под Android ∙ 4 дня 12 часов назад ∙ 15 ставок |