package com.cheng.animationstudy.activity;
import android.content.Intent;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioGroup;
import com.cheng.animationstudy.R;
import com.cheng.utils.Logger;
import com.cheng.utils.ViewFinder;
import com.kale.activityoptions.ActivityCompatICS;
import com.kale.activityoptions.ActivityOptionsCompatICS;
public class TransitionActivityFirst extends AppCompatActivity {
private static int sRandomInt = 3;
private RadioGroup mBottomRG;
private boolean mUseActivityOptionsCompat;
private boolean mUseActivityOptionsCompatICS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transition_first);
initView();
initListener();
}
private void initView() {
this.mBottomRG = ViewFinder.findViewById(this, R.id.rg_bottom);
}
private void initListener() {
this.mBottomRG.setOnCheckedChangeListener(
new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.rb_useactivityoptionscompat) {
mUseActivityOptionsCompat = true;
mUseActivityOptionsCompatICS = false;
} else if (checkedId == R.id.rb_useactivityoptionscompatics) {
mUseActivityOptionsCompatICS = true;
mUseActivityOptionsCompat = false;
}
}
});
}
public void showHorizontalSlideTransition(View v) {
sRandomInt++;
Logger.e(sRandomInt);
switch ((sRandomInt)%3) {
case 0:
// 设置切换动画,从右边进入,左边退出
startActivityWithAnim(R.anim.in_from_right,
R.anim.out_to_left);
break;
case 1:
// 设置切换动画,从右边进入,左边退出,带动态效果
startActivityWithAnim(R.anim.dync_in_from_right,
R.anim.dync_out_to_left);
break;
case 2:
// 设置切换动画,从右边进入,左边退出,带动态效果
startActivityWithAnim(R.anim.new_dync_in_from_right,
R.anim.new_dync_out_to_left);
break;
}
}
public void showVerticleTransition(View v) {
// 设置动画,从下进入,从上退出
startActivityWithAnim(R.anim.in_from_down,
R.anim.out_to_up);
}
public void toActivityOptionsCompatDemo(View v) {
Intent intent = new Intent(
TransitionActivityFirst.this,
OptionsCompatDemoActivity.class
);
startActivity(intent);
}
public void showVerticalTransfer(View v) {
startActivityWithAnim(R.anim.slide_in_bottom,
R.anim.slide_out_bottom);
}
public void showFadeInFadeOutTrans(View v) {
startActivityWithAnim(R.anim.push_left_in,
R.anim.fade_out_left);
}
private void startActivityWithAnim(int startAnimId, int endAnimId) {
Intent intent = new Intent(
TransitionActivityFirst.this,
TransitionActivitySecond.class
);
if (mUseActivityOptionsCompat) {
ActivityOptionsCompat activityOptionsCompat
= ActivityOptionsCompat.makeCustomAnimation(
TransitionActivityFirst.this,
startAnimId,
endAnimId);
ActivityCompat.startActivity(
TransitionActivityFirst.this,
intent,
activityOptionsCompat.toBundle());
} else if (mUseActivityOptionsCompatICS) {
ActivityOptionsCompatICS activityOptionsCompatICS
= ActivityOptionsCompatICS.makeCustomAnimation(
TransitionActivityFirst.this,
startAnimId,
endAnimId);
ActivityCompatICS.startActivity(
TransitionActivityFirst.this,
intent,
activityOptionsCompatICS.toBundle());
} else {
startActivity(intent);
overridePendingTransition(startAnimId, endAnimId);
}
}
// android转场动画windowAnimation和ActivityAnimation的区别
/*
android转场动画windowAnimation和ActivityAnimation的区别
显而易见,window与Activity本身从名字上就知道不同,但对于项目开发中
windowAnimation和ActivityAnimation的区别必须心领神会。
区别主要如下
1.windowAnimation包括 windowEnterAnimation 和 windowExitAnimation ;
ActivityAnimation包含 android:activityOpenEnterAnimation ,
android:activityOpenExitAnimation , android:activityCloseEnterAnimation
和 android:activityCloseExitAnimation
2.在项目中WindowAnimation的控制权大于Activity的控制权,
即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,
那么可能(因为这种情况非常多)只会执行WindowAnimation
3.对于WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation Style即可
<style name="Animation" parent="@android:style/Animation">
<!--窗体进入动画-->
<item name="android:windowEnterAnimation">@anim/slide_left_enter</item>
<!--窗体退出动画-->
<item name="android:windowExitAnimation">@anim/slide_right_exit</item>
</style>
对于Activity,需要继承Animation Activity Style
<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@android:anim/slide_in_left</item>
<item name="android:activityOpenExitAnimation">@android:anim/slide_out_right</item>
<item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/push_left_out</item>
</style>
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation
从上述2中动画的定义上来看,显然ActivityAnimation更为复杂,但这种复杂带来的转场效果非常好,
可以同时控制2个Activity的动画,而不像WindowAnimation只能控制下一个Activity的窗体动画。
5.在开发中,窗体动画也可以使用 Activity. overridePendingTransition来设置,也可以定义在主题中,
但Activity只能使用在主题中
<application
android:name="test.view.weitop.BaseApplication"
android:allowBackup="false"
android:hardwareAccelerated="false"
android:icon="@drawable/app_logo"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/Theme.App" >
</application>
6.对于比较追求界面美感的动画,使用ActivityAnimation要好得多,
因此对于一般开发使用windowAnimation即可,但对于追求用户体验,那么直接使用Activity Animation
*/
}