Tôi đang bắt đầu một hoạt động và muốn có một alpha mờ dần cho startActivity()
, và một mờ dần cho finish()
. Tôi làm cách nào để xử lý vấn đề này trong Android SDK?
Tôi đang bắt đầu một hoạt động và muốn có một alpha mờ dần cho startActivity()
, và một mờ dần cho finish()
. Tôi làm cách nào để xử lý vấn đề này trong Android SDK?
Câu trả lời:
Trong cùng một câu lệnh mà bạn thực thi finish (), hãy thực thi hoạt ảnh của bạn ở đó. Sau đó, trong hoạt động mới, hãy chạy một hoạt ảnh khác. Xem mã này:
fadein.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"/> //Time in milliseconds
</set>
Trong lớp hoàn thiện của bạn
private void finishTask() {
if("blabbla".equals("blablabla"){
finish();
runFadeInAnimation();
}
}
private void runFadeInAnimation() {
Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
a.reset();
LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
ll.clearAnimation();
ll.startAnimation(a);
}
fadeout.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500"/>
</set>
Trong lớp Activity mới, bạn tạo một phương thức tương tự như runFadeAnimation mà tôi đã viết và sau đó bạn chạy nó trong onCreate và đừng quên thay đổi id tài nguyên thành fadeout.
android:duration="@android:integer/config_shortAnimTime"
runFadeAnimation()
Bắt đầu từ API cấp 5, bạn có thể gọi overridePendingTransition ngay lập tức để chỉ định một hoạt ảnh chuyển tiếp rõ ràng:
startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);
hoặc là
finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);
Xem các chủ đề trên android: http://developer.android.com/guide/topics/ui/themes.html .
Trong themes.xml sẽ có android:windowAnimationStyle
nơi bạn có thể thấy phần khai báo kiểu trong styles.xml .
Triển khai ví dụ:
<style name="AppTheme" parent="...">
...
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
</style>
<style name="WindowAnimationStyle">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
@android:anim/fade_in
từ mã java như thế nào?
Sử dụng overridePendingTransition
startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<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" />
</set>
fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>
Đối với fadeIn và fadeOut , chỉ thêm cái này sau super.onCreate (saveInstanceState) trong lớp Hoạt động mới của bạn. Bạn không cần tạo thứ gì khác (Không có XML, không có thư mục hoạt ảnh, không có chức năng bổ sung).
overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
Nếu bạn luôn muốn có cùng một hoạt ảnh chuyển tiếp cho hoạt động
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
}
Tôi muốn sử dụng giải pháp styles.xml, nhưng nó không hoạt động với tôi với các hoạt động. Hóa ra thay vì sử dụng android:windowEnterAnimation
và android:windowExitAnimation
, tôi cần sử dụng các hoạt ảnh hoạt động như sau:
<style name="ActivityAnimation.Vertical" parent="">
<item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
<item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
<item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>
// CREATE anim
// CREATE animation,animation2 xml // animation like fade out
Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
Bundle bndlanimation1 = ActivityOptions.makeCustomAnimation(getApplicationContext(),
R.anim.animation, R.anim.animation2).toBundle();
tartActivity(myIntent1, bndlanimation1);
Hầu hết các câu trả lời đều khá đúng, nhưng một số trong số chúng không được chấp nhận, chẳng hạn như khi sử dụng R.anim.hold và một số trong số chúng chỉ là chi tiết hóa quá trình.
Vì vậy, bạn có thể sử dụng:
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);