淡入 Android 启动 Activity
Fade In Android Launch Activity
在我的发布中寻求帮助activity。我发现了很多关于在有意启动的活动之间淡入淡出的帖子,但没有关于如何在你的启动中淡入淡出的帖子 activity。我试过 overridePendingTransition(int animationIn, int animationOut)
但这对我没有用。我把它放在 onCreate(..)
方法和 onStart(..)
方法中,但都没有成功。任何帮助或指导将不胜感激。
谢谢。
没试过,只是一个技巧;
创建一个空的 activity 并使其成为启动器。在 onCreate
方法中,从那个 activity 开始一个意图,这是您想要淡入的主要 activity。现在您可以从第一个空 activity 应用任何动画].并且第一个 activity 不会影响任何东西,因为它会启动第二个(主)activity,只要它被创建。
我已经为你做了一些改进,不过它不包括操作栏。
为了一个简单的例子,我对 hello world 演示做了一些修改:
为你的启动器设置一个半透明的主题activity,我称之为 Translucy :
/res/values/style.xml
<style name="Theme.Translucy" parent="android:style/Theme.Translucent">
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
</style>
AndroidManifest.xml :
<activity
android:name=".MainActivity"
android:theme="@style/Theme.Translucy"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
为您的主要 xml 布局创建一个 ID,我将其命名为 rlayout_main,
并将其设置为不可见:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/rlayout_main"
android:visibility="invisible"
android:background="@android:color/holo_blue_dark"
tools:context=".MainActivity">
<TextView
android:textSize="50sp"
android:text="@string/hello_world"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
创建一个 AlphaAnimation 并为您的主要父布局设置动画:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout relativeLayoutMain = (RelativeLayout) findViewById(R.id.rlayout_main);
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(3000);
alphaAnimation.setFillAfter(true);
relativeLayoutMain.startAnimation(alphaAnimation);
}
}
(编辑):
为了节省一些代码,您还可以使用 ViewPropertyAnimator 为您的布局设置动画,而不是创建 AlphaAnimation :
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout relativeLayoutMain = (RelativeLayout) findViewById(R.id.rlayout_main);
relativeLayoutMain.animate().alpha(1).setDuration(3000);
}
}
希望这会有所帮助,就像我说的那样它并不完美,因为它排除了 ActionBar,但它可能是一个开始的东西。
在我的发布中寻求帮助activity。我发现了很多关于在有意启动的活动之间淡入淡出的帖子,但没有关于如何在你的启动中淡入淡出的帖子 activity。我试过 overridePendingTransition(int animationIn, int animationOut)
但这对我没有用。我把它放在 onCreate(..)
方法和 onStart(..)
方法中,但都没有成功。任何帮助或指导将不胜感激。
谢谢。
没试过,只是一个技巧;
创建一个空的 activity 并使其成为启动器。在 onCreate
方法中,从那个 activity 开始一个意图,这是您想要淡入的主要 activity。现在您可以从第一个空 activity 应用任何动画].并且第一个 activity 不会影响任何东西,因为它会启动第二个(主)activity,只要它被创建。
我已经为你做了一些改进,不过它不包括操作栏。 为了一个简单的例子,我对 hello world 演示做了一些修改:
为你的启动器设置一个半透明的主题activity,我称之为 Translucy :
/res/values/style.xml
<style name="Theme.Translucy" parent="android:style/Theme.Translucent"> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> </style>
AndroidManifest.xml :
<activity android:name=".MainActivity" android:theme="@style/Theme.Translucy" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
为您的主要 xml 布局创建一个 ID,我将其命名为 rlayout_main, 并将其设置为不可见:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:id="@+id/rlayout_main" android:visibility="invisible" android:background="@android:color/holo_blue_dark" tools:context=".MainActivity"> <TextView android:textSize="50sp" android:text="@string/hello_world" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
创建一个 AlphaAnimation 并为您的主要父布局设置动画:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout relativeLayoutMain = (RelativeLayout) findViewById(R.id.rlayout_main); AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1); alphaAnimation.setDuration(3000); alphaAnimation.setFillAfter(true); relativeLayoutMain.startAnimation(alphaAnimation); } }
(编辑): 为了节省一些代码,您还可以使用 ViewPropertyAnimator 为您的布局设置动画,而不是创建 AlphaAnimation :
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout relativeLayoutMain = (RelativeLayout) findViewById(R.id.rlayout_main); relativeLayoutMain.animate().alpha(1).setDuration(3000); } }
希望这会有所帮助,就像我说的那样它并不完美,因为它排除了 ActionBar,但它可能是一个开始的东西。