Activity切换动漫效果的改变

Activity的卡通效果在\android\frameworks\base\core\res\res\values下的stlyes.xml,themes.xml八个公文中有定义。可是一时这个效能不见得能满意你的渴求,需求团结定义styles.xml来贯彻那些效用。Activity去掉默许的卡通效果方法:1.重写Activity的Them中的windowAnimationStyle相关属性,并保存在res/values/styles.xml

通过overridePendingTransition

这种方法写着轻巧可是糟糕用,通过overridePendingTransition,他的三个参数分别是新Activity步向时的卡通和旧Activity退出时的动漫.若是设置为0则还没有动画。

以此艺术必需跟在startActivity(卡塔尔国或finish(State of Qatar后边才会收效。

抑或先定义八个卡通:

跻身时的动漫片:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="100%"
        android:toYDelta="0"
        android:duration="2000" />
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="2000"
        />
</set>

抽离时的动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="-100%"
        android:duration="2000" />
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="2000"
        />
</set>

跳转时调用:

startActivity(new Intent(MainActivity.this,SecondActivity.class));
overridePendingTransition(R.anim.activity_in,R.anim.activity_out);

效果:

图片 1

总结:

第生机勃勃种艺术:灵活能够随意控步向没有动漫,可是贯彻不便利。
其次种情势:与第生龙活虎种方法临近,不过该种情势为大家提供了多样至极动画。
其三种方法:使用方便,只供给安顿宗旨,不须要加多过多代码,不过非常不足灵活

?xmlversion="1.0"encoding="utf-8"?resourcesstylename="Theme"parent="android:Theme"itemname="android:windowAnimationStyle"@style/Animation/item/stylestylename="Animation"itemname="android:activityOpenEnterAnimation"@null/itemitemname="android:activityOpenExitAnimation"@null/itemitemname="android:activityCloseEnterAnimation"@null/itemitemname="android:activityCloseExitAnimation"@null/itemitemname="android:taskOpenEnterAnimation"@null/itemitemname="android:taskOpenExitAnimation"@null/itemitemname="android:taskCloseEnterAnimation"@null/itemitemname="android:taskCloseExitAnimation"@null/itemitemname="android:taskToFrontEnterAnimation"@null/itemitemname="android:taskToFrontExitAnimation"@null/itemitemname="android:taskToBackEnterAnimation"@null/itemitemname="android:taskToBackExitAnimation"@null/item/style2.在不想有动画的Activity上设置此属性即可activityandroid:name=".XXXXXX"android:label="@string/app_name"android:screenOrientation="nosensor"android:theme="@style/Theme"/resources
  1. PopupWindow的动画
    1.1. 原效果
    1.2. 加动画
  2. Activity过场动漫
    2.1. 通过overridePendingTransition
    2.2. 也是透过style
  3. 给ViewGroup的子控件加进场动画
    3.1. 通过XML
    3.2. 通过java

三.AppTheme: 直接在大旨中期维改正activity动漫样式:

咱俩得以在 AndroidManifest.xml 文件中,通过Android:theme 属性设置 Activity 的宗旨。大旨中得以定义 Activity 的切换动漫。那是应用 Activity 切换动漫的风姿浪漫种格局。上面是因而宗旨来设置 Activity 间的切换动漫的完毕情势。

越来越多享受能够查阅本身的博客 O昂科拉IETech-MobileApplicationDevelopment

加动画

这正是说今后增多二个卡通,首先要定义动画。

  1. 进去的动漫:
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="100%"
        android:toYDelta="0"
        android:duration="2000" />
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="2000"
        />
</set>
  1. 清除的动漫片:
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="100%"
        android:duration="2000" />
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="2000"
        />
</set>
  1. 做成二个style,在res/values/styles.xml文件里增加:
<style name="pop_anim">
        <item name="android:windowEnterAnimation">@anim/pop_in</item>
        <item name="android:windowExitAnimation">@anim/pop_out</item>
    </style>
  1. 安装动漫

这一步就很简短,就加豆蔻梢头行代码

private void initWindow() {
        View view = new View(this);
        view.setBackground(getDrawable(R.drawable.xiaomao));
        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        popupWindow.setAnimationStyle(R.style.pop_anim);
    }

此刻效果就成下边那样了:

图片 2

二. ActivityOptionsCompat:

以此类是supportv4中新加的三个类,可以为activity增加各类卡通效果,那此中的api最少要求4.0之上的系统,部分供给5.0上述,谷歌(GoogleState of Qatar为我们封装好了的风流洒脱对拉伸扩散动漫,分享成分动漫等等,上边只介绍后生可畏种简易意义的完毕方式,

启动:

ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(MainActivity.this, R.anim.open_in, R.anim.open_out);
ActivityCompat.startActivity(MainActivity.this,intent, compat.toBundle());

退出:

Override
public void onBackPressed() {
    super.onBackPressed();
    ActivityCompat.finishAfterTransition(this);
}

留心:该退出办法无法实现预期的卡通效果,还索要选拔第意气风发种艺术实现退出overridePendingTransition(福特Explorer.anim.close_in, R.anim.close_out);

Activity过场动画

3.1、定义饱含动画的 Activity 大旨

res/values/styles.xml

<style name="AnimActivityTheme"  parent="@android:style/Animation.Activity">
    <item name="android:windowAnimationStyle">@style/MyWindowAnimTheme</item>
</style>

不畏选择 windowAnimationStyle 这性格情,内定切换动漫的style就可以。

原效果

先做叁个PopupWindow,那些PopupWindow的View唯有叁个背景图片,贰只大猫。:

private void initWindow() {
        View view = new View(this);
        view.setBackground(getDrawable(R.drawable.xiaomao));
        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    }

然后给按键的点击事件设置为呈现PopupWindow:

btnRun.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (popupWindow.isShowing()) {
                    popupWindow.dismiss();
                } else {
                    popupWindow.showAsDropDown(btnRun);
                }
            }
        });

此时的效劳是这么的:

图片 3

一. overridePendingTransition():

此方法只要求在起步另二个activity和退出activity的时候调用就能够,那个艺术接纳几个参数,多个是新开发银行的activity进入时的卡通片,另三个是眼前activity消失时的动漫片。

启动:

startActivity(newIntent(MainActivity.this,TestActivityWithTheme.class));
overridePendingTransition(R.anim.open_in, R.anim.open_out);

退出:

 @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.close_in, R.anim.close_out);
    }