2012-02-05 1 views
18

Tôi hiện đang làm việc trên một ứng dụng Android và tôi đang gặp một số vấn đề với hoạt động giật gân của mình. Tôi muốn hoạt động chính của mình mờ đi từ hoạt động giật gân của tôi, không phải từ màn hình đen. Cả hoạt động chính và giật gân của tôi đều sử dụng cùng một hình nền vì vậy nếu tôi thực hiện kết hợp fade_in/fade_out, có vẻ lạ khi kiểu nền mờ đi một chút trong quá trình chuyển đổi.Làm mờ hoạt động từ Hoạt động trước đó trong Android

Ý tưởng ở đây là tôi phải có phiên bản logo của mình: bình thường và phát sáng. Tôi muốn hoạt động chính của mình mờ đi vì vậy biểu tượng phát sáng của tôi vượt qua biểu tượng bình thường của tôi khiến hiệu ứng "bật" nhỏ gọn. Đoạn mã sau biến mất từ ​​màn hình đen, không lý tưởng.

/** 
* Pause Activity 
*/ 
@Override 
protected void onPause() 
{ 
    super.onPause(); 
    finish(); 
    overridePendingTransition(android.R.anim.fade_in, 0); 
} 

EDIT:

Tạo hình ảnh động fade_out của riêng tôi để giữ lại mức 1.0 alpha (1,0-1,0) và thêm android:fillAfter="true" để thiết lập splash hoạt hình của tôi cố định vấn đề này.

Trả lời

36

Đó là về thứ tự của sự vật. Dưới đây là ví dụ mờ dần thành hoạt động tiếp theo sau 3 giây:

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 

    //Create an intent that will start the main activity. 
    Intent mainIntent = new Intent(SplashActivity.this, MainMenuActivity.class); 
    SplashActivity.this.startActivity(mainIntent); 

    //Finish splash activity so user cant go back to it. 
    SplashActivity.this.finish(); 

    //Apply splash exit (fade out) and main entry (fade in) animation transitions. 
    overridePendingTransition(R.anim.mainfadein, R.anim.splashfadeout); 
    } 
}, 3000); 

Lưu ý rằng ở đây có hai hoạt ảnh mờ dần và mờ dần.

mainfadein.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="700" /> 

splashfadeout.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
     android:interpolator="@android:anim/decelerate_interpolator" 
     android:zAdjustment="top" 
     android:fromAlpha="1.0" 
     android:toAlpha="0.0" 
     android:duration="700" /> 
+0

Hrm ... này có cùng một vấn đề như mã hiện tại của tôi trong đó nó đi vào một màn hình màu đen trước khi mờ dần nếu tôi bỏ qua fade_out hoặc trông hơi kỳ quặc nếu tôi bỏ nó vào. Tôi đã thử triển khai fade_out của riêng mình, nó chuyển đổi từ 1.0 alpha thành 1.0 alpha nhưng bản ghi gốc o vẫn được di dời trước khi cái mới bị mờ. Mục tiêu ở đây là "ghi đè" hoạt động giật gân với hoạt động chính để có vẻ như logo bắt đầu phát sáng khi các chế độ xem khác xuất hiện. – Karai17

+0

Aha! Tôi sửa nó rồi! – Karai17

+2

Rất vui khi được nghe, tôi cũng đã thêm xml cho khách truy cập trong tương lai. Vì vậy, nếu trong spalsh phai ra, chúng tôi thiết lập android: fillAfter = "true" và alpha từ 1.0.to 1.0, chúng ta có được hiệu ứng cross-fade. Tốt để biết! – Lumis

23

tôi khuyên bạn nên chống lại một crossfade cổ điển, nhưng thay vì hiển thị các Hoạt động mới mà không có một hình ảnh động và chỉ cần làm mờ dần các Hoạt động hiện hành. Điều này trông & cảm thấy sạch hơn và giải quyết một số vấn đề nhỏ mà bạn có thể thấy trình khởi chạy/ứng dụng cơ bản khi bạn mở ứng dụng từ nền trong khi hoạt ảnh đang bắt đầu.

my_splash_fade_out.xml

<?xml version="1.0" encoding="utf-8"?> 

<alpha 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="750" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:interpolator/accelerate_cubic" 
    android:startOffset="250" 
    android:toAlpha="0.0" 
    android:zAdjustment="top" /> 

tôi thêm một startOffset đây để cung cấp cho các Hoạt động mới được tạo ra một chút ra một khởi đầu, vì nó khá nặng.

MySplashActivity.java

... 
startActivity(...); 
finish(); 
overridePendingTransition(0, R.anim.screen_splash_fade_out); 

Preview

Preview animation

+0

Như thế này tốt hơn nhiều, cảm ơn bạn! – George

+0

đẹp và súc tích. –