Budget: 2000 UAH Deadline: 3 days
Good day, I can quickly and efficiently complete your order.
Hello!
There is a page with a top toolbar in ConstraintLayout, with a Title on the left and editing on the right.
We need to add small story icons in the middle that wrap around each other and have a common outline.
This is in the Collapsed state.
At the bottom, there is a vertical RecyclerView.
When pulling down, the scroll should finish, then if pulled down again, the stories should expand like in Telegram. I will attach a file below.
After the stories have expanded (Expanded state), there should be a distance of 16dp between the stories and the outlines should be separated, each with its own outline, considering how much content is inside.
But it needs to be done without using CoordinatorLayout or Compose, as it should be xml and with MotionLayout.
Please write the deadlines and cost if this is feasible

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) {
// Не використовується в даному випадку
}
});
}
}
Apps for iOS (iPhone and iPad) 19 proposals 31 July
Apps for iOS (iPhone and iPad) 32 proposals 31 July
31 proposals 29 July
Apps for iOS (iPhone and iPad) 53 proposals 22 July