通过修改Themed的相关属性,创造出绚丽的Activity切换效果

来源:互联网 发布:程序员都容易猝死吗 编辑:程序博客网 时间:2024/05/16 18:39

首先定义Theme

<resources>    <!-- Base application theme. -->    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">       <item name="android:windowNoTitle">true</item>    </style>    <style name="Anim_custom" parent="AppTheme">        <item name="android:windowAnimationStyle">@style/custom</item>    </style>    <style name="custom" parent="@android:style/Animation.Activity">        <item name="android:activityOpenEnterAnimation">@anim/rotate_in</item>        <item name="android:activityOpenExitAnimation">@anim/rotate_out</item>        <item name="android:activityCloseEnterAnimation">@anim/rotate_in</item>        <item name="android:activityCloseExitAnimation">@anim/rotate_out</item>    </style></resources>
在来定义动画,以上四个属性对应的动画可以是任意动画,不一定非要对称。

下面来定义动画,我在这里偷懒了,然他们对称之定义了两种动画。

rotate_in.xml:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">   <!-- <alpha        android:duration="300"        android:fromAlpha="0.0"        android:interpolator="@android:anim/accelerate_interpolator"        android:toAlpha="1.0" />    <scale        android:fromXScale="0.0"        android:fromYScale="0.0"        android:interpolator="@android:anim/accelerate_interpolator"        android:pivotX="50%"        android:pivotY="50%"        android:duration="300"        android:toXScale="1.0"        android:toYScale="1.0" />-->    <rotate        android:fromDegrees="90"        android:toDegrees="0"        android:pivotX="100%"        android:pivotY="100%"        android:duration="300"        /></set>
rotate_out.xml:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">   <!-- <alpha        android:duration="300"        android:fromAlpha="1.0"        android:interpolator="@android:anim/decelerate_interpolator"        android:toAlpha="0.0" />    <scale        android:fromXScale="1.0"        android:fromYScale="1.0"        android:interpolator="@android:anim/decelerate_interpolator"        android:pivotX="50%"        android:pivotY="50%"        android:duration="300"        android:toXScale="0.0"        android:toYScale="0.0" />-->    <rotate        android:fromDegrees="0"        android:toDegrees="90"        android:interpolator="@android:anim/decelerate_interpolator"        android:pivotX="0%"        android:pivotY="0%"        android:duration="300"        /></set>

可以看到我们定义的是一个set所以可以添加任意多的动画随你喜欢,注释的部分完全可以打开。

AndroidManifest.xml中指定用我们自定义的Theme,一遍所有的Activity都都能用上我们的动画效果,当然如果你只想在某个Activity上用这个动画,只需要让这个Activity单独用我们的Theme就可以:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.liaoli.themedifinitioncustomanimation" >    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:theme="@style/Anim_custom" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".Main2Activity"            android:label="@string/title_activity_main2" >        </activity>    </application></manifest>

Main2Activity代码


package com.example.liaoli.themedifinitioncustomanimation;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class Main2Activity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);    }  }


MainActivity代码:

package com.example.liaoli.themedifinitioncustomanimation;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    public void go(View view) {        Intent i = new Intent(this, Main2Activity.class);        startActivity(i);    }}


源码:http://pan.baidu.com/s/1pJGN80r

0 0