今天在寫一個閃屏頁的時候碰到一個問題,當閃屏頁為全屏血崭,下一個 Activity 不是全屏的時候缩膝,添加 Activity 切換動畫,頂部的任務(wù)欄總是會在動畫結(jié)束的時候突然彈出來丽涩,造成莫名的卡頓感,在一篇博客里找到了比較好的解決方法,在此記錄一下矢渊。
先來看一下需要用到的動畫資源
閃屏頁退出動畫
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top">
<scale
android:duration="@android:integer/config_mediumAnimTime"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:toXScale="0"
android:toYScale="0" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1"
android:toAlpha="0" />
</set>
閃屏頁后下一個要顯示的 Activity 進入動畫
<set xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator">
<scale
Android:duration="@android:integer/config_mediumAnimTime"
Android:fromXScale="2.0"
Android:fromYScale="2.0"
Android:pivotX="50%"
Android:pivotY="50%"
Android:toXScale="1.0"
Android:toYScale="1.0" />
</set>
下面是 SplashActivity.class 的代碼
package com.wechat.sunny.leancloudsty.activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import com.avos.avoscloud.AVUser;
import com.wechat.sunny.leancloudsty.R;
/**
* Created by Sunny on 2017/5/10.
* Email:670453367@qq.com
* Description: 閃屏頁 Activity
*/
public class SplashActivity extends AppCompatActivity {
private final static int USER_LOGINED = 0x01; // 用戶已登錄
private final static int USER_NOT_LOGINED = 0x02; // 用戶未登錄
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case USER_LOGINED:
Intent intentMain = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intentMain);
overridePendingTransition(R.anim.zoomin, R.anim.zoomout); // 啟用 Activity 切換動畫
finish();
break;
case USER_NOT_LOGINED:
Intent intentLogin = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intentLogin);
overridePendingTransition(R.anim.zoomin, R.anim.zoomout); // 啟用 Activity 切換動畫
finish();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 全屏
*/
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
/**
* 判斷用戶是否已經(jīng)登錄
*/
AVUser currentUser = AVUser.getCurrentUser();
if (currentUser != null) {
mHandler.sendEmptyMessageDelayed(USER_LOGINED, 2000);
} else {
mHandler.sendEmptyMessageDelayed(USER_NOT_LOGINED, 2000);
}
}
}
可以看到我們的 Splash 頁面是設(shè)置了全屏的继准,上面的代碼我們不做任何處理,切換 Activity 執(zhí)行動畫的時候矮男,切換到的第二個 Activity 開始也是全屏的移必,直到動畫結(jié)束,頂部的任務(wù)欄突然跳出來毡鉴,給人一種卡頓感崔泵。解決方法很簡單,在 Activity 切換之前猪瞬,把 Splash 頁面的全屏通過以下代碼取消掉即可憎瘸。
/**
* 退出全屏模式,解決從全屏到不是全屏的 Activity 的動畫卡頓問題
*/
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
這樣第二個 Activity 的任務(wù)欄開始就是顯示的撑螺,并且也是通過動畫顯示出來的含思。
方法參考自:http://www.reibang.com/p/63bba2e09b78