Câu trả lời:
Bạn có thể làm điều này với Activity.overridePendingTransition()
. Bạn có thể định nghĩa các hình ảnh động chuyển tiếp đơn giản trong tệp tài nguyên XML.
onCreate
chức năng Hoạt động của bạn .
Đây là mã để làm mờ dần đẹp giữa hai Hoạt động ..
Tạo một tệp gọi là fadein.xml
trongres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
Tạo một tệp gọi là fadeout.xml
trongres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
Nếu bạn muốn phai từ Hoạt động Một đến Hoạt động B , đặt sau đây trong các onCreate()
phương pháp Hoạt động B . Trước khi setContentView()
làm việc cho tôi.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Nếu độ mờ quá chậm đối với bạn, hãy thay đổi android:duration
các tệp xml ở trên thành một cái gì đó nhỏ hơn.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
Xem các tệp đó cũng có thể cho bạn gợi ý về cách cải thiện hoạt ảnh tùy chỉnh của bạn (ví dụ: bằng cách làm mờ dần trong thời gian dài hơn mờ dần).
fadein
và fadeout
để fade_in
và fade_out
. Từ bài của Dan J
overridePendingTransition()
ngay sau khi gọi finish()
và / hoặc startActivity()
. Tôi đã có thể có được một sự mờ dần tốt đẹp theo cách này bằng cách gọi nó ngay sau khi khởi chạy Activity mới.
Một cách thậm chí dễ dàng để làm điều đó là:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
Đó là nó :)
Đúng. Bạn có thể nói với HĐH loại chuyển đổi nào bạn muốn có cho hoạt động của mình.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Trong đó ANIMATION là một số nguyên đề cập đến một hình ảnh động được xây dựng trong HĐH.
tạo res> anim> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
tạo res> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
Trong res> giá trị> style.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
Trong các hoạt động onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Để biết danh sách các hình ảnh động mặc định, xem: http://developer.android.com/reference/android/R.anim.html
Thực tế fade_in
, có fade_out
API cấp 1 trở lên.
Tôi ghi đè lên hoạt hình mặc định của tôi. Tôi kiểm tra nó trong api 15 rằng nó hoạt động trơn tru. Đây là giải pháp mà tôi sử dụng:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Tạo thư mục hoạt hình trong thư mục res và sau đó tạo bốn tệp hoạt hình này:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide tựa_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide tựa_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Bạn có thể tải về dự án mẫu của tôi .
Đó là tất cả... :)
Đây là mã để thực hiện trơn tru giữa hai hoạt động.
hiệu ứng mượt mà từ trái sang phải
Tạo một tệp có tên là slide_in_right.xml và slide thừng_right.xml trong res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide tựa_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
hiệu ứng mượt mà từ phải sang trái
Tạo một tệp có tên là animation_enter.xml và animation_leave.xml trong res / anim
anim_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700"/>
</set>
anim_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
Điều hướng từ hoạt động này sang hoạt động thứ hai
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4.Trên sự kiện báo chí trở lại hoặc Điều hướng từ hoạt động thứ hai đến một Hoạt động
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
ngay sau startActivity: developer.android.com/reference/android/app/áp
Bạn không thể sử dụng overridePendingTransition trong Android 1.5. overridePendingTransistion đã đến với Android 2.0.
Nếu bạn sẽ vượt qua điều này mà không có bất kỳ lỗi nào, bạn phải biên dịch cho mục tiêu (1,5 hoặc cao hơn) bằng cách sử dụng các hình ảnh động thông thường (hoặc bạn sở hữu) hoặc bạn phải biên dịch cho mục tiêu (2.0 trở lên) bằng cách sử dụng overridePendingTransistion.
Tóm tắt: Bạn không thể sử dụng overridePendingTransistion trong Android 1.5 .
Mặc dù vậy, bạn có thể sử dụng các hình ảnh động tích hợp trong HĐH.
Trong các thiết bị GALAXY:
Bạn cần đảm bảo rằng bạn không tắt nó trong thiết bị bằng Cài đặt> Tùy chọn nhà phát triển:
Sử dụng API ActivityCompat.startActivity () hoạt động> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Một số phiên bản Android hỗ trợ Activity
chuyển đổi tùy chỉnh và một số phiên bản không (thiết bị cũ hơn). Nếu bạn muốn sử dụng các hiệu ứng chuyển tiếp tùy chỉnh, hãy kiểm tra xem liệu Activity
cóoverridePendingTransition()
phương pháp, như trên các phiên bản cũ nó không.
Để biết liệu phương thức có tồn tại hay không, API phản chiếu có thể được sử dụng. Đây là mã đơn giản sẽ kiểm tra và trả về phương thức nếu nó tồn tại:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
Và sau đó, chúng ta có thể áp dụng chuyển tiếp của riêng mình, tức là sử dụng phương thức này nếu nó tồn tại:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Ở đây, như một ví dụ, các hình ảnh động mờ dần và mờ dần đơn giản đã được sử dụng để trình diễn chuyển tiếp ..
phóng to hoạt hình
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
các câu trả lời liên quan dưới đây: Bạn có thể vượt qua(0, 0)
nếu bạn không muốn có hoạt hình nào cả.