Hoạt ảnh Android xml về chuyển động của đối tượng. Tạo hoạt ảnh chuyển tiếp giữa Hoạt động trong Android

Bắt đầu từ Android 4.4, các nhà phát triển có thêm một công cụ để tạo hoạt ảnh - Transitions Framework. Ban đầu nó được thiết kế để tạo hoạt ảnh thay đổi trạng thái của ứng dụng bằng cách thao tác trên nhiều Chế độ xem. VỚI Bản phát hành Android 5.0, bộ hoạt ảnh có sẵn để sử dụng đã được mở rộng để tương ứng với khái niệm Thiết kế Vật liệu được giới thiệu cùng lúc.

Transitions Framework cho phép bạn tạo nhiều hình ảnh động khác nhau một cách nhanh chóng và dễ dàng. Vì vậy, trong quá trình làm việc trên i Funny thì không thể bỏ qua bộ công cụ này. Mời bạn đọc tham gia một trường hợp đặc biệt về việc sử dụng Transitions API - tạo hoạt ảnh chuyển đổi giữa các Hoạt động với hiệu ứng “liền mạch”.

Từ quan điểm trực quan, hoạt ảnh chuyển tiếp giữa các Hoạt động được trình bày trong Khung chuyển tiếp có thể được chia thành hai loại: hoạt ảnh thông thường và hoạt ảnh có thành phần chung. Khái niệm hoạt hình với một yếu tố chung được thể hiện bằng một hình ảnh bị đánh cắp một cách trung thực từ dev.android.com. 1. Các thành phần phổ biến trên đó là hình đại diện và tên liên hệ.

Cơm. 1. Hoạt ảnh chuyển tiếp giữa Hoạt động với các thành phần chung

Nhưng không ai thích những lời giới thiệu dài dòng cả, vì vậy hãy chuyển thẳng sang câu chuyện về cách tạo ra các hoạt ảnh thuộc loại này trong ứng dụng i Funny. Ví dụ đầu tiên, hãy xem xét hoạt ảnh được hiển thị trong Hình. 2. Để sử dụng nó, chúng ta cần có phiên bản Android 5.0 trở lên.


Cơm. 2. Ảnh động chuyển đổi giữa Hoạt động trên màn hình xác thực người dùng

Từ quan điểm của người dùng, không có gì bất thường ở đây: một màn hình, hoạt ảnh đơn giản. Tuy nhiên, như bạn có thể đoán, “dưới mui xe” là sự chuyển tiếp giữa hai màn hình với một thành phần chung.

Kỳ lạ thay, bước đầu tiên để tạo ra sự chuyển đổi như vậy là chọn chính phần tử này và xác định vị trí của nó trong bố cục của cả hai Hoạt động. Sau này, bạn cần thêm thuộc tính android:transitionName vào mô tả của từng Chế độ xem hiển thị phần tử đã chọn và cũng gán cho chúng một android:id nếu thiếu.

Trong trường hợp của chúng tôi, đây là các ImageView thông thường có dạng sau:

Có hai điểm quan trọng đáng lưu ý ở đây. Đầu tiên, cả hai ImageView cần được đặt thành cùng một transitionName, điều này hợp lý. Thứ hai, vì chúng ta đang sử dụng ImageView nên nội dung của chúng phải giống nhau, vì việc sử dụng hai tài nguyên khác nhau có thể dẫn đến những hậu quả không mong muốn (ít nhất là chế độ xem hoạt ảnh nhấp nháy ở đầu và cuối hoạt ảnh).

Ở bước thứ hai, bạn cần thêm các tùy chọn cho Hoạt động đã khởi chạy (thứ hai), cho biết rằng hoạt ảnh sẽ được khởi chạy khi nó bắt đầu.

Ghi chú.“Thứ hai” chúng tôi muốn nói đến Hoạt động đã khởi chạy, quá trình chuyển đổi sang hoạt động này phải được thực hiện và “đầu tiên” chúng tôi muốn nói đến Hoạt động khởi chạy.

Điều này được thực hiện như sau:

Gói gói = null; if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) ( Xem v = hoạt động.findViewById(R.id.auth_logo); if (v != null) ( Tùy chọn Hoạt động = Hoạt động.makeSceneTransitionAnimation(hoạt động , v, hoạt động.getString(R.string.email_auth_transition)); bó = tùy chọn.toBundle(); ) ) Ý định = ý định mới (hoạt động, SecondActivity.class); if (gói == null) ( hoạt động.startActivity(ý định); ) khác ( hoạt động.startActivity(ý định, gói); )

Trong danh sách sau:

  • R.id.auth_logo - ImageView từ Hoạt động đầu tiên, được sử dụng trong hoạt ảnh;
  • hoạt động - Hoạt động đầu tiên;
  • R.string.email_auth_transition - nhãn trước đây được để lại trong bố cục của cả hai ImageView;
  • SecondActivity.class - Hoạt động thứ hai.

Và bây giờ, người đọc chú ý có thể bối rối: trong phần giới thiệu chúng ta đã nói về việc sử dụng API cấp 19, trong ví dụ có API cấp 21 và trong danh sách ở trên có hạn chế về API cấp 22. Thật không may, khi viết mã, nó hóa ra rằng hoạt ảnh chuyển tiếp có thành phần chung có thể hoạt động không chính xác trên điện thoại có API cấp 21. Điều này thể hiện ở dạng hoạt ảnh bị chậm lại nói chung và các tạo phẩm trên Chế độ xem hoạt ảnh nói riêng. Nếu bạn đã quen thuộc với chủ đề này, biết lý do của hành vi này và/hoặc cách giải quyết vấn đề được mô tả, hãy cho chúng tôi biết về vấn đề đó trong phần nhận xét.

Ở bước thứ ba, cần mô tả hoạt ảnh chuyển tiếp, tức là. chỉ ra đường dẫn mà Chế độ xem động đi qua và sự chuyển đổi của chính Chế độ xem đó. Đối với điều này, chúng tôi sẽ tạo ra tập tin riêng biệt projectName/src/main/res/transitions/email_auth_transition.xml với nội dung sau:

Một chút lý thuyết. Thẻ transitionSet nhằm mục đích mô tả một số phép biến đổi được áp dụng cho Chế độ xem động cùng một lúc. Tham số transitionOrdering kiểm soát thứ tự áp dụng các phép biến đổi này. Trong trường hợp của chúng tôi, chúng được áp dụng đồng thời. Có một số loại chuyển đổi dựng sẵn được cung cấp trong Khung chuyển tiếp. Danh sách đầy đủ có thể được tìm thấy trên trang này. Chúng ta sẽ tập trung vào hai cái cụ thể: ChangeBounds và ChangeImageTransform.

Cái đầu tiên là để chuyển đổi kích thước của Chế độ xem. Cái thứ hai chỉ hoạt động với ImageView và kết hợp với cái thứ nhất, cho phép bạn thay đổi không chỉ kích thước mà còn cả hình dạng của ImageView. Sử dụng dữ liệu chuyển đổi, chúng tôi thu được hình ảnh động đầu ra về việc thay đổi kích thước hình ảnh, được hiển thị trong Hình. 2. Nếu bạn không chỉ định kiểu chuyển động của Chế độ xem động thì nó sẽ di chuyển theo đường đi ngắn nhất. Hơn cách thú vị Chúng ta sẽ xem xét chuyển động trong ví dụ thứ hai.

Bước cuối cùng trong việc tạo hoạt ảnh là khai báo nó trong chủ đề của cả hai Hoạt động. Để thực hiện việc này, hãy chỉnh sửa mô tả của các chủ đề như sau (hoặc tạo chủ đề mới trong thư mục projectName/src/main/res/values-v22/theme.xml):

  • android:windowActivityTransitions cho phép hoạt ảnh chuyển tiếp;
  • android:windowSharedElementEnterTransition trỏ tới một tệp mô tả hoạt ảnh của quá trình chuyển đổi từ Hoạt động đầu tiên sang Hoạt động thứ hai;
  • android:windowSharedElementExitTransition trỏ đến một tệp mô tả hoạt ảnh chuyển tiếp khi quay lại từ Hoạt động thứ hai về Hoạt động đầu tiên.

Cần lưu ý rằng đối với các phiên bản HĐH dưới 5.1 cần tạo các chủ đề có phong cách giống hệt nhau để tránh những hậu quả khá mong đợi khi ứng dụng bị treo. Ví dụ: hãy đặt chúng vào tệp projectName/src/main/res/values/theme.xml:

Hoặc theo chương trình:

Chuyển đổi bùng nổ = TransitionInflater.from(this).inflateTransition(R.transition.explode);
getWindow().setEnterTransition(nổ);

Cầu trượt

Chuyển đổi slide cho phép bạn trượt vào hoặc ra khỏi giao dịch từ phía bên phải hoặc phía dưới màn hình. Mặc dù bạn có thể đã đạt được điều này trước đây nhưng quá trình chuyển đổi mới này linh hoạt hơn nhiều.

Chuyển tiếp slide cho phép bạn trượt tuần tự vào các hình ảnh con

Quá trình chuyển đổi này có thể phổ biến khi chuyển đổi giao dịch, tôi đặc biệt thích slide bên phải do trạng thái giống như chất lỏng của nó. Một lần nữa, điều này rất dễ thực hiện:

android:interpolator=“@android:interpolator/decelerate_cubic“
android:slideEdge=“kết thúc“/>

Ở đây chúng tôi:

  • Thông báo chuyển tiếp slide
  • Đặt slideEdge chuyển tiếp kết thúc ở đó (ở bên phải), để các slide chuyển sang bên phải - slide dưới cùng phải được đặt ở dưới cùng

Mờ dần

Chuyển đổi mờ dần cho phép bạn chuyển đổi sang giao dịch nội bộ hoặc bên ngoài bằng cách sử dụng hiệu ứng mờ dần.

Quá trình chuyển đổi mờ dần rất đơn giản, mặc dù quá trình chuyển đổi mờ dần rất dễ chịu.

Việc tạo nó thậm chí còn dễ dàng hơn so với các chuyển đổi trước đó:

android:duration=“300“/>

Ở đây chúng tôi:

  • Chúng tôi thông báo quá trình chuyển đổi mờ dần
  • Đặt thời lượng thành 300 mili giây

Tối ưu hóa chuyển đổi

Mặc dù đã thử nghiệm nhưng tôi đã tìm thấy một số phương pháp có thể giúp cải thiện các hiệu ứng chuyển tiếp được đề cập ở trên.

Cho phép chuyển đổi nội dung cửa sổ- bạn phải kích hoạt thuộc tính sau trong các chủ đề kế thừa từ chủ đề vật chất:

ĐÚNG VẬY

Bật/tắt chuyển tiếp phù hợp- Khi chuyển đổi, có thể có độ trễ khi một hành động chờ một hành động khác hoàn tất quá trình chuyển đổi trước khi hành động đó có thể bắt đầu quá trình chuyển đổi của chính nó. Tùy thuộc vào trường hợp sử dụng, quá trình chuyển đổi nhìn chung sẽ trôi chảy và tự nhiên hơn nếu bạn bật các thuộc tính sau:

ĐÚNG VẬY

Loại trừ hình ảnh khỏi quá trình chuyển đổi- Đôi khi chúng tôi có thể không muốn tạo chuyển tiếp cho tất cả hình ảnh giao dịch của mình. Tôi nhận thấy rằng trong hầu hết các trường hợp, thanh trạng thái và thanh công cụ đều gây ra sự cố chuyển tiếp. May mắn thay, chúng tôi có thể loại trừ một số loài nhất định đã được đưa vào quá trình chuyển đổi của chúng tôi:

android:duration=“200“>




Thanh công cụ và thanh hành động- Khi chuyển đổi giữa các thao tác sử dụng Action Bar sang sử dụng Toolbar (và ngược lại), đôi khi tôi nhận thấy quá trình chuyển đổi không phải lúc nào cũng suôn sẻ. Để khắc phục điều này, tôi đảm bảo rằng hai hoạt động liên quan đến quá trình chuyển đổi đều sử dụng cùng một thành phần.

Thời gian chuyển tiếp- Bạn không muốn người dùng phải chờ đợi quá lâu nhưng cũng không muốn tạo ra các thành phần xuất hiện với tốc độ ánh sáng. Điều này phụ thuộc vào quá trình chuyển đổi mà bạn đang sử dụng, vì vậy tốt nhất bạn nên thử nghiệm, nhưng tôi nhận thấy rằng thời lượng 200-500 mili giây có tác dụng trong hầu hết các trường hợp.

Các yếu tố chuyển tiếp phổ biến

Các phần tử chuyển tiếp được chia sẻ cho phép bạn tạo hiệu ứng chuyển tiếp giữa các hình ảnh được chia sẻ trong một giao dịch, tạo ra các chuyển tiếp thú vị hơn và giúp người dùng hiểu rõ hơn về hành trình của họ.

Ở đây, hình ảnh từ hành động đầu tiên của chúng tôi được thu nhỏ và dịch thành hình ảnh tiêu đề trong hành động thứ hai

Trong bố cục của mình, chúng tôi phải liên kết bất kỳ hình ảnh phổ biến nào bằng thuộc tính transitionName - điều này thiết lập mối quan hệ chuyển tiếp giữa các hình ảnh. Dưới đây là những hình ảnh chung từ hoạt hình trên:

Đây là những hình ảnh được chia sẻ, có nghĩa là chúng sẽ trở nên sống động với nhau trong quá trình chuyển đổi hành động

Để chuyển đổi giữa hai điều này, chúng tôi bắt đầu bằng cách khai báo tên của quá trình chuyển đổi chung, được thực hiện bằng cách sử dụng thuộc tính transitionName trong bố cục XML.




android:transitionName=“@string/transition_view“/>



android:id=“@+id/view_shared_transition“
android:transitionName=“@string/transition_view“/>
android:id=“@+id/view_separator“/>
android:id=“@+id/text_detail“/>
android:id=“@+id/text_close“/>

Sau khi hoàn thành việc này, chúng ta tạo một đối tượng Cặp ở bước 1) chứa hình ảnh chuyển tiếp của chúng ta và tên chuyển tiếp của nó. Sau đó, chúng tôi chuyển nó sang các tùy chọn giao dịch mẫu như (ActivityOptionsCompat) để cả hai hoạt động đều nhận biết được các thành phần chung. Từ đó chúng ta sẽ bắt đầu giao dịch của mình, thông qua tùy chọn ví dụ:

Người tham gia cặp = Cặp mới<>(mSquareView, ViewCompat.getTransitionName(mSquareView));
Hoạt độngOptionsCompat chuyển tiếpActivityOptions =
Hoạt độngOptionsCompat.makeSceneTransitionAnimation(
SharedTransitionsActivity.this, người tham gia);
Hoạt độngCompat.startActivity(SharedTransitionsActivity.this,
ý định, transitionActivityOptions.toBundle());

Việc tách những hình ảnh này trong khi quá trình chuyển đổi đang diễn ra thực sự giúp hoàn thành quá trình chuyển đổi.

Đây là phần chuyển tiếp giữa hai hình ảnh này, nhưng còn những hình ảnh trong màn thứ hai trượt từ bên dưới thì sao?

(Những người ở bên trái)

Tôi rất vui vì bạn đã hỏi! Điều này cũng dễ dàng đạt được, như hình dưới đây:

Trượt slide = Slide mới(Gravity.BOTTOM);
slide.addTarget(R.id.view_separator);
slide.addTarget(R.id.text_detail);
slide.addTarget(R.id.text_close);
getWindow().setEnterTransition(slide);
Như bạn có thể thấy, chúng tôi tạo mẫu Trang trình bày chuyển tiếp mới bằng cách thêm các chế độ xem mục tiêu cho quá trình chuyển đổi và đặt trang trình bày làm chuyển tiếp mục nhập giao dịch.

Chuyển tiếp tùy chỉnh

Chúng tôi cũng có khả năng tạo các chuyển đổi của riêng mình bằng cách sử dụng bất kỳ hoạt ảnh nào từ API mà chúng tôi đã đề cập cho đến nay. Ví dụ: chúng ta có thể thực hiện thêm một bước chuyển tiếp Phần tử được chia sẻ để trở thành hình ảnh chuyển tiếp - điều này có thể hữu ích khi chúng ta muốn hiển thị hộp thoại (hoặc hình ảnh bật lên tương tự), như hiển thị bên dưới:

Chuyển động này giúp hướng sự chú ý của người dùng giữa các trạng thái thành phần

Chúng ta hãy xem nhanh những gì đang xảy ra ở đây:

  • Chúng tôi bắt đầu bằng cách tạo SharedTransition, chuyển ở trạng thái được nhấn cùng với tên chuyển đổi để tham chiếu thành phần được chia sẻ
  • Tiếp theo, chúng tôi tạo một phiên bản ArcMotion, điều này cho phép chúng tôi tạo hiệu ứng chuyển động cong khi chuyển đổi giữa hai hình ảnh
  • Sau đó, chúng tôi mở rộng ChangeBounds để tạo chuyển đổi tùy chỉnh và chuyển đổi hai biểu mẫu (chúng tôi có một lớp riêng cho nút và FAB). Ở đây, chúng tôi ghi đè các phương thức khác nhau từ lớp để có thể tạo hiệu ứng động cho các thuộc tính được yêu cầu. Chúng ta sẽ sử dụng ViewPropertyAnimator để tạo hoạt ảnh cho độ trong suốt của hình ảnh hộp thoại, ObjectAnimator để tạo hoạt ảnh cho hình ảnh giữa hai màu và một AnimatorSet mẫu để chúng ta có thể tạo hiệu ứng cho cả hai hiệu ứng này cùng nhau.

Vector hoạt hình của hệ số đầu vào

Kể từ phiên bản API 21 (Lollipop), AnimatedVectorDrawable có thể được sử dụng để tạo hoạt ảnh cho các thuộc tính VectorDrawable nhằm tạo ra hoạt ảnh của đối tượng có thể vẽ.

Bây giờ thật dễ dàng để tạo một số loại hoạt ảnh khác nhau trên hệ số đầu vào

Nhưng làm thế nào để chúng tôi làm điều này? Vâng, chúng ta hãy xem điều này:

Nó bao gồm một số tệp khác nhau và chúng tôi bắt đầu bằng cách tạo hai tệp vectơ riêng biệt, mỗi tệp có một số thuộc tính:

  • Chiều cao và chiều rộng - Kích thước thực tế của hình ảnh vector
  • Chiều cao và chiều rộng của khung nhìn - Khai báo kích thước của khung vẽ ảo nơi các rãnh vectơ được vẽ trên đó
  • Tên nhóm - Khai báo nhóm mà bản nhạc thuộc về
  • Pivot X & Y - Khai báo trục xoay dùng để chia tỷ lệ và xoay nhóm
  • Tô màu đường dẫn - Vector tô màu đường dẫn
  • Path Data - Khai báo dữ liệu của đường dẫn vector dùng để vẽ vector

Lưu ý: Tất cả các thuộc tính liên kết được lưu trữ trong một tệp dòng chung, giúp giữ cho các phần tử được ngăn nắp và gọn gàng.

android:chiều cao=“56dp“
android:width=“56dp“

android:viewportWidth=“24.0“>

android:pivotX=“12“
android:pivotY=“12“>

android:pathData=“@string/path_add“/>

Vectơ được tạo từ tệp ic_add.xml của chúng tôi (bên dưới)

android:chiều cao=“56dp“
android:width=“56dp“
android:viewportHeight="24.0"
android:viewportWidth=“24.0“>
android:name=“@string/groupAddRemove“
android:pivotX=“12“
android:pivotY=“12“>
Android:fillColor=“@color/Stroke_color“
android:pathData=“@string/path_remove“/>

Vectơ được tạo từ tệp ic_remove.xml của chúng tôi (bên dưới)

Tiếp theo, chúng tôi khai báo các tệp Vector có thể vẽ hoạt hình, đặt cả Vector có thể vẽ được và hoạt ảnh được sử dụng cho từng trạng thái "kéo dài" (Thêm hoặc Xóa). Bằng cách xem xét vectơ hoạt ảnh được thêm hoặc xóa, chúng ta khai báo mục tiêu:

Hoạt hình từ trạng thái này sang trạng thái khác
Hoạt hình xoay của hệ số đã nhập

android:drawable=“@drawable/ic_add“>
android:name=“@string/add“
android:animation=“@animator/add_to_remove“ />
android:name=“@string/groupAddRemove“
android:animation=“@animator/rotate_add_to_remove“ />

Sau đó, chúng ta phải tạo từng tệp được đề cập cho các mục đích này.

Thay đổi trạng thái của hệ số đã nhập

Trong add_to_remove.xml, chúng tôi sử dụng ObjectAnimator để chuyển đổi giữa các hình dạng bằng các thuộc tính sau:

  • PropertyName - Thuộc tính hoạt ảnh
  • valueFrom- Giá trị ban đầu cho đường dẫn vectơ
  • valueTo- Giá trị đích cho đường dẫn vector
  • Thời lượng - Thời lượng của hoạt ảnh
  • bộ nội suy - Bộ nội suy được sử dụng cho hoạt ảnh
  • ValueType - Loại giá trị chúng ta đang tạo hiệu ứng

xmlns:android=“//schemas.android.com/apk/res/android“
android:propertyName=“pathData“
android:valueFrom=“@string/path_add“
android:valueTo=“@string/path_remove“

android:interpolator=“@android:interpolator/fast_out_slow_in“
android:valueType=“pathType“ />

Xoay biểu mẫu

Chúng tôi sử dụng cách tiếp cận tương tự để xoay hình bằng cách sử dụng thuộc tính góc quay và độ lớn:

xmlns:android=“//schemas.android.com/apk/res/android“
android:propertyName=“xoay”
android:valueFrom=“-180“
android:valueTo=“0“
android:duration=“@integer/duration“
android:interpolator=“@android:interpolator/fast_out_slow_in“ />
Hoạt ảnh đảo ngược (từ Xóa sang Thêm) hoạt động tương tự, chỉ với các giá trị hoạt ảnh đảo ngược.

Vector hệ số đầu vào hoạt hình đã hoàn thành của chúng ta trông thật tuyệt phải không!

Và kết luận là…

Mặc dù chỉ là bề nổi nhưng tôi hy vọng bài viết này đã cung cấp một số thông tin chi tiết về cách bạn có thể tạo ra chuyển động có ý nghĩa trong ứng dụng của mình. Tôi mong muốn tìm hiểu cách tôi có thể đẩy chúng đi xa hơn và cải thiện giao diện thiết kế của tôi.

Nếu bạn thích bài viết này, vui lòng nhấp vào “Đề xuất”!

Tôi muốn biết suy nghĩ của bạn về vấn đề này và nơi bạn sử dụng những hoạt ảnh này - vui lòng để lại nhận xét hoặc tweet cho tôi!

Chúc một ngày tốt lành cho tất cả. Tôi muốn dành bài đăng này cho chủ đề về các mảnh vỡ dành cho Android. Hiện đã có bản dịch và một số bài viết trên Habré đề cập đến cách bắt đầu làm việc với các mảnh cho Android. Ví dụ như bài viết. Nó chứa mô tả về các phân đoạn là gì và chúng có sẵn ở phiên bản Android nào, vì vậy những người chưa sử dụng nó có thể đọc nó nếu họ muốn, nhưng tôi sẽ không kể lại điều này trong bài đăng của mình. Vậy tôi sẽ đi thẳng vào vấn đề.

Bắt đầu công việc

Hãy để tôi nói ngắn gọn rằng các đoạn là các thành phần giao diện người dùng có thể được sử dụng bằng lớp Hoạt động để hiển thị dữ liệu người dùng, nhưng vòng đời của chúng không phụ thuộc vào điều đó. Chức năng do các mảnh cung cấp có chức năng làm việc với chúng rộng hơn so với Hoạt động, vì vậy việc sử dụng chúng có tầm quan trọng không nhỏ đối với các nhà phát triển nếu họ muốn ứng dụng của mình có giao diện người dùng hiện đại hơn theo tiêu chuẩn ngày nay.

Bây giờ chúng ta hãy đi vào điểm của bài viết. Theo ý kiến ​​​​của tôi, các nhà phát triển mảnh Google đã được ban tặng sự hỗ trợ tuyệt vời cho hoạt ảnh hiển thị chính mảnh đó. Điều này sẽ được thảo luận thêm. Tôi đã tìm kiếm Habr các bài viết về chủ đề này nhưng không tìm thấy gì nên bây giờ tôi sẽ chia sẻ kiến ​​thức của mình.

Tạo một dự án

Hãy tạo một dự án nhỏ. Tôi đã tạo một dự án cho Samsung Nexus S của mình, nơi tôi có phiên bản Android 4.1.2, đây là phiên bản tôi đã sử dụng (Api cấp 16). Tôi gọi dự án đó là FragmentsAnimationTest.

Để minh họa, chúng ta sẽ cần hoạt động chính và bố cục của nó, một vài đoạn, mỗi đoạn có bố cục riêng và một vài tệp xml khác cho chính hoạt ảnh mà tôi sẽ nói sau.

Ứng dụng sẽ trông như thế này: một trong các đoạn sẽ được hiển thị trên màn hình, việc chuyển đổi giữa chúng sẽ được thực hiện bằng nút thông thường và theo đó, việc chuyển đổi các đoạn sẽ đi kèm với hiệu ứng hoạt hình.

Trước tiên, hãy sắp xếp các thành phần của hoạt động chính trong tệp hoạt động_main.xml: