http://vietjack.com/android/index.jsp Copyright © vietjack.com Fragment Transition Android Một Transition gì? Activity transition Fragment transition Lollipop xây dựng đặc điểm Android gọi Transition Được giới thiệu KitKat, Transition Framework cung cấp API tiện lợi để chuyển đổi trạng thái UI khác ứng dụng Framework xây dựng dựa xoay quanh hai khái niệm: Scenes Transitions Một Scene định nghĩa trạng thái cho UI ứng dụng, Transition định nghĩa thay đổi hai Scene Khi Scene thay đổi, Transition có hai nhiệm vụ chính: − • Nắm bắt trạng thái view hai Start scene End Scene • Tạo Animator dựa khác animate view từ scene sang scene khác Ví dụ Ví dụ giải thích cho bạn cách tạo Custom Animation với Fragment Transition Bạn theo bước tương tự ví dụ Hello World − Bước Miêu tả Bạn sử dụng Android Studio để tạo ứng dụng Android có tên làfragmentcustomanimations packagecom.example.fragmentcustomanimations Sửa đổi activity_main.xml, đặt atres/layout/activity_main.xml để thêm Text View Tạo layout fragment_stack.xml.xml thư mục res/layout để định nghĩa thẻ fragment thẻ button Tạo thư mục đặt res/ đặt tên animation thêm fragment_slide_left_enter.xml, fragment_slide_left_exit.xml, http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com ,fragment_slide_right_exit.xml fragment_slide_left_enter.xml Trong MainActivity.java, bạn cần thêm fragment stack, fragment manager, onCreateView() Chạy ứng dụng để chạy Android Emulator kiểm tra kết thay đổi thực ứng dụng Sau nội dung res.layout/activity_main.xml Nó chứa TextView Và nội dung res/animation/fragment_stack.xml file Nó chứa frame layout button Nội dung res/animation/fragment_slide_left_enter.xml file sau Nó chứa phương thức set đối tượng Animator Dưới nội dung res/animation/fragment_slide_left_exit.xml file Nó chứa thẻ set objectAnimator Code sau nội dung res/animation/fragment_slide_right_enter.xml file Nó chứa thẻ set objectAnimator Code sau nội dung es/animation/fragment_slide_right_exit.xml file Nó chứa thẻ set objectAnimator Nội dung src/main/java/MainActivity.java file sau Nó chứa button listener, stack fragment onCreateView package com.example.fragmentcustomanimations; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; /** * Demonstrates the use of custom animations in a FragmentTransaction when * pushing and popping a stack */ public class FragmentCustomAnimations extends Activity { int mStackLevel = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_stack); // Watch for button clicks Button button = (Button)findViewById(R.id.new_fragment); button.setOnClickListener(new OnClickListener() { onClick(View v) { addFragmentToStack(); public void } }); if (savedInstanceState == null) { // Do first time initialization -add initial fragment Fragment newFragment = CountingFragment.newInstance(mStackLevel); getFragmentManager().beginTransaction(); newFragment).commit(); } FragmentTransaction ft = ft.add(R.id.simple_fragment, { else savedInstanceState.getInt("level"); } void onSaveInstanceState(Bundle outState) { } mStackLevel = @Override public super.onSaveInstanceState(outState); outState.putInt("level", mStackLevel); } void addFragmentToStack() { mStackLevel++; // Instantiate a new fragment Fragment newFragment = CountingFragment.newInstance(mStackLevel); // Add the fragment to the activity, pushing this transaction // on to the back stack FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.animator.fragment_slide_left_enter, R.animator.fragment_slide_left_exit, R.animator.fragment_slide_right_enter, R.animator.fragment_slide_right_exit); ft.replace(R.id.simple_fragment, newFragment); ft.addToBackStack(null); ft.commit(); } public static class CountingFragment extends Fragment { int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument */ static CountingFragment newInstance(int num) { CountingFragment f = new CountingFragment(); // Supply num input as an argument Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments */ savedInstanceState) { @Override public void onCreate(Bundle super.onCreate(savedInstanceState); http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/android/index.jsp Copyright © vietjack.com mNum = getArguments() != null ? getArguments().getInt("num") : 1; /** * The Fragment's UI is just a simple text view showing its instance number */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { container, false); } * View v = inflater.inflate(R.layout.hello_world, View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #" + mNum); tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery _thumb)); return v; } } } AndroidManifest.xml có nội dung sau: android:name="android.intent.category.LAUNCHER" />