Tôi có thể thay đổi hoạt ảnh chuyển tiếp startActivity () của Android không?


Câu trả lời:


33

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.


1
Bên cạnh đó, nó có thể là tốt hơn để sử dụng thời gian mặc định hoạt hình ngắn:android:duration="@android:integer/config_shortAnimTime"
elimirks

ở đâurunFadeAnimation()
Choletski

2
Các bạn, hãy chắc chắn để xem câu trả lời thực sự bên dưới bài đăng này.
phát triển Android

blabbla là gì ?? !!
Ali Khaki

288

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);

17
Thêm một cái gì đó như: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } để thêm lại các hoạt ảnh.
RightHandedMonkey

1
Đây phải là câu trả lời rõ ràng nhất.
cy198706

1
@RightHandedMonkey Để thêm hoạt ảnh trở lại, hãy ghi đè kết thúc (); phương thức của hoạt động đối với trường hợp hoạt động kết thúc bằng thứ khác ngoài nút quay lại (ví dụ: nút thoát tùy chỉnh ...).
Itiel Maimon

43

Xem các chủ đề trên android: http://developer.android.com/guide/topics/ui/themes.html .

Trong themes.xml sẽ có android:windowAnimationStylenơ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>



3
Giải pháp tốt nhất .
Abhishek kumar

Bạn sẽ truy cập @android:anim/fade_intừ mã java như thế nào?
Tamoxin

17

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>

9

Đối với fadeInfadeOut , 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);

1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z

9

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);
    }
}

4

Bạn chỉ cần tạo một ngữ cảnh và thực hiện một số việc như sau: -

private Context context = this;

Và hoạt ảnh của bạn: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

Bạn có thể sử dụng bất kỳ hoạt ảnh nào bạn muốn.


1

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:windowEnterAnimationandroid: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>

0
 // 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);

0

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.